OSDN Git Service

>>66
authorikemo <ikemo@56b19765-1e22-0410-a548-a0f45d66c51a>
Wed, 11 Aug 2004 14:32:47 +0000 (14:32 +0000)
committerikemo <ikemo@56b19765-1e22-0410-a548-a0f45d66c51a>
Wed, 11 Aug 2004 14:32:47 +0000 (14:32 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/kita/kita/trunk@1282 56b19765-1e22-0410-a548-a0f45d66c51a

kita/src/kitatabwidgetbase.cpp
kita/src/kitatabwidgetbase.h
kita/src/kitawritetabwidget.cpp
kita/src/part/kitahtmlpart.cpp
kita/src/part/kitahtmlpart.h
kita/src/part/kitawritedialog.cpp
kita/src/part/kitawritedialog.h

index 64f519c..e2dd58a 100644 (file)
@@ -52,14 +52,19 @@ KitaTabWidgetBase::KitaTabWidgetBase( QWidget* parent, const char* name, WFlags
 
 KitaTabWidgetBase::~KitaTabWidgetBase()
 {
-    KParts::Part * part;
-    while ( ( part = m_manager->parts()->getFirst() ) != NULL ){
-        m_manager->removePart( part );
-       removePage( part->widget() );
-        delete part;
+    /* romove parts */
+    if( m_manager && !( m_manager->parts()->isEmpty() ) ){
+       KParts::Part * part;
+       while ( ( part = m_manager->parts()->getFirst() ) != NULL ){
+           m_manager->removePart( part );
+           removePage( part->widget() );
+           delete part;
+       }
     }
-    delete m_manager;
+    if( m_manager ) delete m_manager;
+    m_manager = NULL;
 
+    /* remove widgets which don't belong to parts */
     QWidget* view = currentPage();
     while( count() > 0 && view){
        removePage( view );
@@ -163,6 +168,7 @@ KParts::Part* KitaTabWidgetBase::findPartFromWidget( QWidget* w )
 {
     if( w == NULL ) return NULL;
     if( m_manager == NULL ) return NULL;
+    if( m_manager->parts()->isEmpty() ) return NULL;
     
     KParts::Part *part;
     QPtrListIterator<KParts::Part> it( *( m_manager->parts() ) );
@@ -493,10 +499,10 @@ KitaDockWidgetBase::KitaDockWidgetBase( KDockManager* dockManager,
     setDockSite( KDockWidget::DockNone );
     m_docked = TRUE;
     m_parentDock = static_cast< KParts::DockMainWindow* >( parent );
-    m_brotherDock = NULL;
+    m_closeButtonClicked = FALSE;
 
     /* connect signals */
-    connect( this, SIGNAL( headerCloseButtonClicked() ), SLOT( slotSaveDocStatus() ) );
+    connect( this, SIGNAL( headerCloseButtonClicked() ), SLOT( slotHeaderCloseButtonClicked() ) );
     connect( this, SIGNAL( iMBeingClosed() ), SLOT( slotSaveDocStatus() ));
 
     Kita::SignalCollection* signalCollection = Kita::SignalCollection::getInstance();
@@ -534,7 +540,6 @@ void KitaDockWidgetBase::slotShowPart( const KURL& url, const QString& libName,
 void KitaDockWidgetBase::slotSaveDocStatus()
 {
     if( isVisible() ){
-       m_brotherDock = NULL;
        m_docked = FALSE;
        m_tabbed = FALSE;
 
@@ -551,17 +556,30 @@ void KitaDockWidgetBase::slotSaveDocStatus()
 /* show & activate dock widget */ /* public slot */
 void KitaDockWidgetBase::slotShowDock()
 {
+    m_closeButtonClicked = FALSE;
     ShowDockEvent* e = new ShowDockEvent( TRUE );
     QApplication::postEvent( this, e );  // Qt will delete it when done
 }
 
-/* show but not activate dock widget */ /* public slot */
+/* show but not activate dock widget               */
+/* If m_closeButtonClicked = TRUE, then do nothing */ /* public slot */
 void KitaDockWidgetBase::slotShowDockNoActive()
 {
+    if( m_closeButtonClicked ) return;
     ShowDockEvent* e = new ShowDockEvent( FALSE );
     QApplication::postEvent( this, e );  // Qt will delete it when done
 }
 
+/* This slot is called when the close button is clicked.        */
+/* Some classes, ( e.g. KitaWriteTabWidget ), call
+   slotShowDockNoActive after clicked the close button.
+   So, set m_closeButtonClicked = TRUE, and forbid to re-open
+   the dock. See also KitaWriteTabWidget::slotChangeWriteTab.   */ /* private slot */
+void KitaDockWidgetBase::slotHeaderCloseButtonClicked()
+{
+    m_closeButtonClicked = TRUE;
+    slotSaveDocStatus();
+}
 
 /* show dock widget immediately */ /* public */
 void KitaDockWidgetBase::showDock( bool activate )
index 4e99c86..d00e60f 100644 (file)
@@ -129,8 +129,8 @@ class KitaDockWidgetBase : public KDockWidget{
 
     bool m_docked;
     bool m_tabbed;
+    bool m_closeButtonClicked;
     KParts::DockMainWindow* m_parentDock;
-    KDockWidget* m_brotherDock;
     QDict<KDockWidget>* m_dockDict;
        
 public:
@@ -161,6 +161,7 @@ protected:
 
     
 private slots:
+    void slotHeaderCloseButtonClicked();
     void slotIsKitaActive();
 
     
index d220db2..94c629b 100644 (file)
@@ -151,19 +151,31 @@ KitaWriteDialog* KitaWriteTabWidget::isWriteView( QWidget* w )
 
 
 
-/* private slot */
+/* when thread view is focused, this slot is called    */
+/* See also KitaThreadView::setFocus.                  */ /* private slot */
 void KitaWriteTabWidget::slotChangeWriteTab( const KURL& url )
 {
-    if( count() == 0 ) return;
+    KitaWriteDialog* view;
+    int max = count();
+    if( max == 0 ) return;
     
     KURL datURL = Kita::ParseMisc::parseURLonly( url );
-    
-    KitaWriteDialog* view = findWriteView( datURL );
+
+    /* disable all ok buttons. */
+    int i = 0;
+    while( i < max ){
+       view = isWriteView( page( i ) );
+       if( view ) view->slotEnableWriting( FALSE );
+       i++;
+    }
+
+    /* show current url page. */
+    view = findWriteView( datURL );
     if ( view ){
        static_cast< KitaDockWidgetBase* >( parentWidget() )->slotShowDockNoActive();
        if( currentPage() != view ) setCurrentPage( indexOf( view ) );
+       view->slotEnableWriting( TRUE );
     }
-    else static_cast< KitaDockWidgetBase* >( parentWidget() )->slotHideDock();
 }
 
 
index bf63de1..c569776 100644 (file)
@@ -83,8 +83,11 @@ void KitaHTMLPart::clearPart()
        /* don't forget to unlock previous datURL here. */
        Kita::DatManager::unlock( m_datURL );
 
-       /* close write dock too */
-       if( m_mode == HTMLPART_MODE_MAINPART ) emit closeWriteTab( m_datURL );
+       /* emit deactivated all thread view SIGNAL */
+       if( m_mode == HTMLPART_MODE_MAINPART ) emit activateThreadView( QString::null );
+       
+       /* close write dock */
+//     if( m_mode == HTMLPART_MODE_MAINPART ) emit closeWriteTab( m_datURL );
     }
 
     m_anchorStack.clear();
@@ -170,6 +173,8 @@ void KitaHTMLPart::connectSignals()
             signalCollection, SIGNAL( showKitaNaviRevResTree( const KURL&,  int )));
 
     /* write dock */
+    connect( this,SIGNAL( activateThreadView( const KURL& ) ),
+            signalCollection, SIGNAL( activateThreadView( const KURL& ) ) );
     connect( this,SIGNAL( closeWriteTab( const KURL& ) ),
             signalCollection, SIGNAL( closeWriteTab( const KURL& ) ) );
     
index 5011427..2c604bf 100644 (file)
@@ -205,6 +205,9 @@ signals:
     void showKitaNaviByName( const KURL& , QString);
     void showKitaNaviResTree( const KURL&,  int );
     void showKitaNaviRevResTree( const KURL&,  int );
+
+    /* write dock */
+    void activateThreadView( const KURL& );
     void closeWriteTab( const KURL& );
 };
 
index 4bf20b6..799507f 100644 (file)
@@ -223,6 +223,8 @@ void KitaWriteDialog::reject()
 
 // vim:sw=2:
 
+/* public slot */
+void KitaWriteDialog::slotEnableWriting( bool enable ){ buttonOk->setEnabled( enable ); }
 
 /* update preview screen */
 void KitaWriteDialog::slotCurrentChanged ( QWidget * w )
@@ -297,10 +299,12 @@ void KitaWriteDialog::slotShowErrorDialog( const QString& input, const KURL& )
 
        /* reload */
         emit openURLRequest( m_datURL, argdummy );     
-
+       
        /* clear */
        m_postInfo.body = QString::null;
        clear( m_postInfo );
+
+//     closeCurrentTab(); /* to KitaWriteTabWidget */
        
         break;
        
index ca04045..56e248c 100644 (file)
@@ -55,6 +55,7 @@ public:
     void setup( const KURL& url );
     
 public slots:
+    void slotEnableWriting( bool enable );
     void postMessage();
 
 private slots: