From: ikemo Date: Sat, 21 Aug 2004 11:56:01 +0000 (+0000) Subject: >>83 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e5996e9dcdc678450296ad9fceb990b613042a22;p=kita%2Fkita.git >>83 git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/kita/kita/trunk@1305 56b19765-1e22-0410-a548-a0f45d66c51a --- diff --git a/kita/src/kitatabwidgetbase.cpp b/kita/src/kitatabwidgetbase.cpp index 7182d66..241c3bc 100644 --- a/kita/src/kitatabwidgetbase.cpp +++ b/kita/src/kitatabwidgetbase.cpp @@ -537,7 +537,7 @@ KitaDockWidgetBase::~KitaDockWidgetBase(){} /* public slot */ void KitaDockWidgetBase::slotShowPart( const KURL& url, const QString& libName, const QString& mimetype ) { - slotShowDock(); + slotShowDock( TRUE, TRUE ); static_cast ( getWidget() )->slotShowPart( url, libName, mimetype ); } @@ -562,37 +562,37 @@ void KitaDockWidgetBase::slotSaveDocStatus() } } -/* show & activate dock widget */ /* public slot */ -void KitaDockWidgetBase::slotShowDock() +/* This slot is called when user clicks the close button. */ +/* m_closeButtonClicked is set to prevent from re-openning */ +/* the dock. To reset m_closeButtonClicked, call showDock */ +/* with force = TRUE. See also slotShowDock() and showDock() */ /* private slot */ +void KitaDockWidgetBase::slotHeaderCloseButtonClicked() { - m_closeButtonClicked = FALSE; - ShowDockEvent* e = new ShowDockEvent( TRUE ); - QApplication::postEvent( this, e ); // Qt will delete it when done + m_closeButtonClicked = TRUE; + slotSaveDocStatus(); } -/* show but not activate dock widget */ -/* If m_closeButtonClicked = TRUE, then do nothing */ /* public slot */ -void KitaDockWidgetBase::slotShowDockNoActive() + +/* show this dock widget later. */ +/* Usually, call this slot instead of showDock(). */ +/* See also showDock() and customEvent(). */ /* public slot */ +void KitaDockWidgetBase::slotShowDock( bool activate, bool force ) { - if( m_closeButtonClicked ) return; - ShowDockEvent* e = new ShowDockEvent( FALSE ); + ShowDockEvent* e = new ShowDockEvent( activate, force ); 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 */ +/* show this dock widget immediately. */ +/* If activate is TRUE, activate this dock. */ +/* If force is TRUE, show this anyway. */ +/* If force is FALSE and tab has no children, */ +/* this dock is not shown. */ /* public */ void KitaDockWidgetBase::showDock( bool activate, bool force ) { + if( force ) m_closeButtonClicked = FALSE; /* see also slotHeaderCloseButtonClicked() */ + if( m_closeButtonClicked ) return; + QWidget* wd = getWidget(); KitaTabWidgetBase* w = NULL; if( wd && wd->inherits( "KitaTabWidgetBase" )) w = static_cast ( wd ); @@ -661,7 +661,7 @@ void KitaDockWidgetBase::slotHideDock() /* public slot */ void KitaDockWidgetBase::slotToggleShowHide() { - if( !isVisible() ) slotShowDock(); + if( !isVisible() ) slotShowDock( TRUE, TRUE ); else slotHideDock(); } @@ -686,7 +686,8 @@ void KitaDockWidgetBase::closeEvent( QCloseEvent* e ) void KitaDockWidgetBase::customEvent( QCustomEvent * e ) { if ( e->type() == EVENT_ShowDock ){ - showDock( static_cast< ShowDockEvent* >( e )->getActivate(), FALSE ); + ShowDockEvent* sde = static_cast< ShowDockEvent* >( e ); + showDock( sde->getActivate(), sde->getForce() ); } } diff --git a/kita/src/kitatabwidgetbase.h b/kita/src/kitatabwidgetbase.h index 9476179..b22703d 100644 --- a/kita/src/kitatabwidgetbase.h +++ b/kita/src/kitatabwidgetbase.h @@ -147,13 +147,12 @@ public: WFlags f = 0); ~KitaDockWidgetBase(); - void showDock( bool active, bool force ); + void showDock( bool active = TRUE, bool force = TRUE ); public slots: void slotShowPart( const KURL&, const QString&, const QString& ); void slotSaveDocStatus(); - void slotShowDock(); - void slotShowDockNoActive(); + void slotShowDock( bool activate = TRUE , bool force = TRUE ); void slotHideDock(); void slotToggleShowHide(); @@ -198,10 +197,14 @@ class CloseTabEvent : public QCustomEvent class ShowDockEvent : public QCustomEvent { bool m_activate; + bool m_force; + public: - ShowDockEvent( bool activate ):QCustomEvent( EVENT_ShowDock ), m_activate( activate ){} + ShowDockEvent( bool activate, bool force ):QCustomEvent( EVENT_ShowDock ) + , m_activate( activate ),m_force( force ){} const bool getActivate() const { return m_activate; } + const bool getForce() const { return m_force; } }; diff --git a/kita/src/kitathreadtabwidget.cpp b/kita/src/kitathreadtabwidget.cpp index 67dff7f..1bd2a53 100644 --- a/kita/src/kitathreadtabwidget.cpp +++ b/kita/src/kitathreadtabwidget.cpp @@ -74,7 +74,6 @@ void KitaThreadTabWidget::slotShowMainThread( const KURL& url, bool withNewTab ) if( i != -1 ) jumpNum = refstr.left( i ).toInt(); else jumpNum = refstr.toInt(); } - if( jumpNum == 0 ) jumpNum = Kita::DatManager::getKokoyonNum( datURL ); KitaThreadView* view = findMainView( datURL ); @@ -87,7 +86,7 @@ void KitaThreadTabWidget::slotShowMainThread( const KURL& url, bool withNewTab ) /* The view is already shown */ /* TODO: jump to jumpNum after reloading */ - else view->slotReloadButton(); + else view->slotReloadButton( jumpNum ); } else if ( withNewTab @@ -735,7 +734,7 @@ KitaThreadTabWidget* KitaThreadDock::setupAsMainView() /* public slot */ void KitaThreadDock::slotShowThread( const QString& url, bool withNewTab ) { - slotShowDock(); + showDock(); if( m_threadTab ) m_threadTab->slotShowMainThread( url, withNewTab ); } @@ -783,7 +782,7 @@ void KitaThreadDock::connectNaviSignals() /* show res */ /* private slot */ void KitaThreadDock::slotShowKitaNavi( const KURL& datURL, int startnum, int endnum ) { - slotShowDock(); + showDock(); KURL parsedURL = Kita::ParseMisc::parseURLonly( datURL ); m_threadTab->slotShowKitaNavi( KITANAVI_SHOWRES, parsedURL, QString::null, startnum, endnum ); @@ -793,7 +792,7 @@ void KitaThreadDock::slotShowKitaNavi( const KURL& datURL, int startnum, int end /* extract by ID */ /* private slot */ void KitaThreadDock::slotShowKitaNaviByID( const KURL& datURL, QString strid ) { - slotShowDock(); + showDock(); KURL parsedURL = Kita::ParseMisc::parseURLonly( datURL ); m_threadTab->slotShowKitaNavi( KITANAVI_EXTBYID, parsedURL, strid, 0, 0 ); @@ -804,7 +803,7 @@ void KitaThreadDock::slotShowKitaNaviByID( const KURL& datURL, QString strid ) /* extract by keywords */ /* private slot */ void KitaThreadDock::slotShowKitaNaviByWord( const KURL& datURL, QString query ) { - slotShowDock(); + showDock(); KURL parsedURL = Kita::ParseMisc::parseURLonly( datURL ); m_threadTab->slotShowKitaNavi( KITANAVI_EXTBYWORD, parsedURL, query, 0, 0 ); @@ -814,7 +813,7 @@ void KitaThreadDock::slotShowKitaNaviByWord( const KURL& datURL, QString query ) /* extract by name */ /* private slot */ void KitaThreadDock::slotShowKitaNaviByName( const KURL& datURL, QString query ) { - slotShowDock(); + showDock(); KURL parsedURL = Kita::ParseMisc::parseURLonly( datURL ); m_threadTab->slotShowKitaNavi( KITANAVI_EXTBYNAME, parsedURL, query, 0, 0 ); @@ -825,7 +824,7 @@ void KitaThreadDock::slotShowKitaNaviByName( const KURL& datURL, QString query ) /* res tree */ /* private slot */ void KitaThreadDock::slotShowKitaNaviResTree( const KURL& datURL, int resNum ) { - slotShowDock(); + showDock(); int num; KURL parsedURL = Kita::ParseMisc::parseURLonly( datURL ); @@ -837,7 +836,7 @@ void KitaThreadDock::slotShowKitaNaviResTree( const KURL& datURL, int resNum ) /* reverse res tree */ /* private slot */ void KitaThreadDock::slotShowKitaNaviRevResTree( const KURL& datURL, int resNum ) { - slotShowDock(); + showDock(); int num; KURL parsedURL = Kita::ParseMisc::parseURLonly( datURL ); diff --git a/kita/src/kitawritetabwidget.cpp b/kita/src/kitawritetabwidget.cpp index 0ced056..73a1d30 100644 --- a/kita/src/kitawritetabwidget.cpp +++ b/kita/src/kitawritetabwidget.cpp @@ -181,7 +181,7 @@ void KitaWriteTabWidget::slotChangeWriteTab( const KURL& url ) /* show current url page. */ view = findWriteView( datURL ); if ( view ){ - static_cast< KitaDockWidgetBase* >( parentWidget() )->slotShowDockNoActive(); + static_cast< KitaDockWidgetBase* >( parentWidget() )->slotShowDock( FALSE, FALSE ); if( currentPage() != view ) setCurrentPage( indexOf( view ) ); view->slotEnableWriting( TRUE ); } diff --git a/kita/src/part/kitahtmlpart.cpp b/kita/src/part/kitahtmlpart.cpp index d3792a3..75433fa 100644 --- a/kita/src/part/kitahtmlpart.cpp +++ b/kita/src/part/kitahtmlpart.cpp @@ -65,7 +65,7 @@ KitaHTMLPart::~KitaHTMLPart() void KitaHTMLPart::clearPart() { - deletePopup(); + slotDeletePopup(); /* delete KitaDomTree */ if ( m_domtree ) delete m_domtree; @@ -87,12 +87,11 @@ void KitaHTMLPart::clearPart() /* 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(); m_centerNum = 0; + m_jumpNumAfterLoading = 0; findTextInit(); } @@ -438,6 +437,7 @@ bool KitaHTMLPart::load( int centerNum ) /*--------------------------------*/ m_centerNum = centerNum; + m_jumpNumAfterLoading = 0; if( m_mode != HTMLPART_MODE_MAINPART ) return FALSE; if( !m_domtree ) return FALSE; @@ -459,7 +459,7 @@ bool KitaHTMLPart::load( int centerNum ) /* see also slotReceiveData() and slotFinishLoad(). */ /* public */ -bool KitaHTMLPart::reload() +bool KitaHTMLPart::reload( int jumpNum ) { /* config */ @@ -480,6 +480,7 @@ bool KitaHTMLPart::reload() m_domtree->StopParseThread(); m_firstReceive = TRUE; if( m_centerNum == 0 ) m_centerNum = m_domtree->getBottomResNumber(); + m_jumpNumAfterLoading = jumpNum; /* DatManager will call back slotReceiveData and slotFinishLoad. */ Kita::DatManager::updateCache( m_datURL , this ); @@ -560,6 +561,9 @@ void KitaHTMLPart::slotFinishLoad() m_domtree->parseAllRes(); m_centerNum = 0; + if( m_jumpNumAfterLoading ) gotoAnchor( QString().setNum( m_jumpNumAfterLoading ), FALSE ); + m_jumpNumAfterLoading = 0; + emit finishReload(); } @@ -1677,11 +1681,36 @@ bool KitaHTMLPart::showNext100Etc( const QString& refstr ) /* popup */ -/*---------------------*/ -/* show popup window */ /* private */ +/* public slot */ +void KitaHTMLPart::slotDeletePopup() +{ + if ( m_popup ) delete m_popup; + m_popup = NULL; + m_multiPopup = FALSE; +} + + +/* for convenience */ /* public slot */ +void KitaHTMLPart::slotShowResPopup( QPoint point, int refNum, int refNum2 ) +{ + QString innerHTML = Kita::DatManager::getHtml( m_datURL, refNum, refNum2 ); + if ( innerHTML == QString::null ) return; + + showPopupCore( m_datURL, innerHTML, point ); +} + + +/* for convenience */ /* private */ void KitaHTMLPart::showPopup( const KURL& url, const QString& innerHTML ) { - deletePopup(); + showPopupCore( url, innerHTML, QCursor::pos() ); +} + + +/* show popup window */ /* private */ +void KitaHTMLPart::showPopupCore( const KURL& url, const QString& innerHTML, QPoint point ) +{ + slotDeletePopup(); m_multiPopup = FALSE; m_popup = new Kita::ResPopup( view() , url ); @@ -1690,7 +1719,7 @@ void KitaHTMLPart::showPopup( const KURL& url, const QString& innerHTML ) m_popup->setText( innerHTML ); m_popup->adjustSize(); - m_popup->adjustPos(); + m_popup->adjustPos( point ); m_popup->show(); } @@ -1730,15 +1759,6 @@ void KitaHTMLPart::hidePopup() -/* private */ -void KitaHTMLPart::deletePopup() -{ - if ( m_popup ) delete m_popup; - m_popup = NULL; - m_multiPopup = FALSE; -} - - /* return TRUE if this view is under mouse. */ /* private */ bool KitaHTMLPart::isUnderMouse( int mrgwd, int mrght ) { @@ -1837,7 +1857,7 @@ void KitaHTMLPart::slotOnURL( const QString& url ) if( isMultiPopupMode() ) return; - deletePopup(); + slotDeletePopup(); if ( url.isEmpty() ) return ; if ( url.left( 7 ) == "mailto:" ) return; @@ -2045,8 +2065,15 @@ namespace Kita /* public */ - void ResPopup::adjustPos() + void ResPopup::adjustPos( QPoint pos ) { + enum{ + POS_LeftUp, + POS_RightUp, + POS_LeftDown, + POS_RightDown + }; + /* config */ const int mrg = 10; @@ -2058,54 +2085,98 @@ namespace Kita QRect qr = QApplication::desktop() ->rect(); int sw = qr.width(), sh = qr.height(); int wd = width(), ht = height(); - - QPoint pos = QCursor::pos(); int x = pos.x(), y = pos.y(); + int idx; - if ( x + mrg + wd < sw ) - { + if ( ( x + mrg ) + wd < sw + && ( y - mrg ) - ht >= 0 ) idx = POS_LeftUp; + + else if ( ( x - mrg ) - wd >= 0 + && y - ( ht + mrg ) >= 0 ) idx = POS_RightUp; + + else if ( ( x + mrg ) + wd < sw + && ( y + mrg ) + ht < sh ) idx = POS_LeftDown; + + else if ( ( x - mrg ) - wd >= 0 + && ( y + mrg ) + ht < sh ) idx = POS_RightDown; + + else{ + int area[4]; + area[0] = ( sw - x ) * y; + area[1] = x * y; + area[2] = ( sw - x ) * ( sh - y ); + area[3] = x * ( sh - y ); + + idx = 0; + for( int i = 1; i < 4; ++i) if( area[ i ] > area[ idx ] ) idx = i; + } + + switch( idx ){ + + case POS_LeftUp: x = x + mrg; - y = QMAX( 0, y - ( ht + mrg ) ); + y = ( y - mrg ) - ht; + break; - } - else if ( y - ( mrg + ht ) >= 0 ) - { - x = QMAX( 0, sw - wd ); - y = y - ( ht + mrg ); + case POS_RightUp: + x = ( x - mrg ) - wd; + y = ( y - mrg ) - ht; + break; - } - else if ( y + ( mrg + ht ) <= sh ) - { - x = QMAX( 0, sw - wd ); + case POS_LeftDown: + x = x + mrg; + y = y + mrg; + break; + + case POS_RightDown: + x = ( x - mrg ) - wd; y = y + mrg; + break; + } + if( x < 0 ){ + + x = ht % 16; } - else if ( x - ( mrg + wd ) >= 0 ) - { - x = x - ( mrg + wd ); - y = QMAX( 0, y - ( ht + mrg ) ); + if( x + wd >= sw ){ + x = sw - wd - ( ht % 16 ); + + if( x < 0 ) { + m_htmlPart->view()->setVScrollBarMode( QScrollView::AlwaysOn ); + x = 0; + wd = sw; + } } - else - { - x = x + mrg; - y = QMAX( 0, y - ( ht + mrg ) ); + + if( y < 0 ){ + if( x <= pos.x() && pos.x() < x + wd ){ + m_htmlPart->view()->setVScrollBarMode( QScrollView::AlwaysOn ); + ht += y; + } + y = 0; } - + if( y + ht >= sh ){ + + if( x <= pos.x() && pos.x() < x + wd ){ + m_htmlPart->view()->setVScrollBarMode( QScrollView::AlwaysOn ); + ht = sh - y; + } + else{ + y = sh - ht; + + if( y < 0 ){ + m_htmlPart->view()->setVScrollBarMode( QScrollView::AlwaysOn ); + y = 0; + ht = sh; + } + } + } + pos.setX( x ); pos.setY( y ); move( pos ); - if( x + wd >= sw ) - { - m_htmlPart->view()->setVScrollBarMode( QScrollView::AlwaysOn ); - wd = sw - x; - } - if( y + ht >= sh ) - { - m_htmlPart->view()->setVScrollBarMode( QScrollView::AlwaysOn ); - ht = sh - y; - } m_htmlPart->view()->resize( wd, ht ); resize( wd, ht ); } diff --git a/kita/src/part/kitahtmlpart.h b/kita/src/part/kitahtmlpart.h index 8a8a92c..1745764 100644 --- a/kita/src/part/kitahtmlpart.h +++ b/kita/src/part/kitahtmlpart.h @@ -62,6 +62,7 @@ class KitaHTMLPart : public KHTMLPart /* goto anchor */ QStringList m_anchorStack; + int m_jumpNumAfterLoading; /* see also slotFinishLoad() */ /* mouse event */ bool m_pushctrl; @@ -97,7 +98,7 @@ public: /* cache */ bool load( int centerNum ); - bool reload(); + bool reload( int jumpNum ); /* goto anchor */ bool gotoAnchor( const QString& anc, bool pushPosition ); @@ -131,6 +132,9 @@ public slots: void slotClickTmpNext100(); void slotClickShowAll(); + /* res popup */ + void slotDeletePopup(); + void slotShowResPopup( QPoint point, int refNum, int refNum2 ); private: @@ -157,10 +161,10 @@ private: /* res popup */ void showPopup( const KURL& url, const QString& innerHTML ); + void showPopupCore( const KURL& url, const QString& innerHTML, QPoint point ); bool startMultiPopup(); bool isMultiPopupMode(); void hidePopup(); - void deletePopup(); bool isUnderMouse( int mrgwd, int mrght ); bool showSelectedDigitPopup(); @@ -233,7 +237,7 @@ namespace Kita ~ResPopup(); void setText( const QString& str ); void adjustSize(); - void adjustPos(); + void adjustPos( QPoint pos ); void moveMouseAbove(); signals: diff --git a/kita/src/part/kitathreadview.cpp b/kita/src/part/kitathreadview.cpp index 5f3a347..2a91d4a 100644 --- a/kita/src/part/kitathreadview.cpp +++ b/kita/src/part/kitathreadview.cpp @@ -494,6 +494,8 @@ void KitaThreadView::showThread( const KURL& datURL, int num ) { /* If this widget is not parent, then do nothing. */ if ( m_viewmode != VIEWMODE_MAINVIEW ) return ; + + if( num == 0 ) num = Kita::DatManager::getKokoyonNum( datURL ); if ( topLevelWidget() ->isMinimized() ) topLevelWidget() ->showNormal(); topLevelWidget() ->raise(); @@ -516,12 +518,12 @@ void KitaThreadView::showThread( const KURL& datURL, int num ) /*---------*/ /* reload */ /*---------*/ /* public slot */ -void KitaThreadView::slotReloadButton() +void KitaThreadView::slotReloadButton( int jumpNum ) { topLevelWidget() ->raise(); setActiveWindow(); - if( m_threadPart->reload() ) + if( m_threadPart->reload( jumpNum ) ) { showStatusBar( Kita::ParseMisc::utf8ToUnicode( KITAUTF8_NOWRENEW ) ); } @@ -532,6 +534,7 @@ void KitaThreadView::slotReloadButton() /* stop loading the thread */ /* public slot */ void KitaThreadView::slotStopLoading() { + m_threadPart->slotDeletePopup(); Kita::DatManager::stopLoading(m_datURL); } @@ -559,7 +562,7 @@ void KitaThreadView::showStatusBar( QString info ) datSize = Kita::DatManager::getDatSize(m_datURL); errstr = QString::null; - if ( m_rescode != 200 && m_rescode != 206 ) + if ( m_rescode != 200 && m_rescode != 206 && m_rescode != 0 ) errstr = QString( "Error %1" ).arg( m_rescode ); if ( broken ) info += " This thread is broken."; @@ -630,12 +633,21 @@ void KitaThreadView::slotSearchButton() { if ( m_datURL.isEmpty() ) return ; /* Nothing is shown on the screen.*/ - /* jump */ QString str = SearchCombo->currentText(); - if ( str.at( 0 ) == ':' ) - { - QString anc = str.mid( 1 ); - m_threadPart->gotoAnchor( anc, FALSE ); + if ( str.at( 0 ) == ':' ){ + + /* show res popup */ + if ( str.at( 1 ) == 'p' ){ + int refNum = str.mid( 2 ).toInt(); + QPoint pos = mapToGlobal( SearchCombo->pos() ); + pos.setY( pos.y() + SearchCombo->height()/2 ); + m_threadPart->slotShowResPopup( pos , refNum, refNum ); + return; + } + + /* jump */ + QString anc = str.mid( 1 ); + m_threadPart->gotoAnchor( anc, FALSE ); SearchCombo->setFocus(); return ; } diff --git a/kita/src/part/kitathreadview.h b/kita/src/part/kitathreadview.h index 7726546..80c317b 100644 --- a/kita/src/part/kitathreadview.h +++ b/kita/src/part/kitathreadview.h @@ -78,7 +78,7 @@ public slots: void subjectlinkMClicked( const QString &URL ); void showThread( const KURL& datURL, int num ); void setFont( const QFont& font ); - void slotReloadButton(); + void slotReloadButton( int jumpNum = 0 ); void slotStopLoading(); void focusSearchCombo(); void slotDeleteButtonClicked();