OSDN Git Service

>>543
[kita/kita.git] / kita / src / favoritelistview.cpp
1 /***************************************************************************
2 *   Copyright (C) 2003 by Hideki Ikemoto                                  *
3 *   ikemo@users.sourceforge.jp                                            *
4 *                                                                         *
5 *   This program is free software; you can redistribute it and/or modify  *
6 *   it under the terms of the GNU General Public License as published by  *
7 *   the Free Software Foundation; either version 2 of the License, or     *
8 *   (at your option) any later version.                                   *
9 ***************************************************************************/
10
11 #include "favoritelistview.h"
12
13 #include "libkita/favoritethreads.h"
14 #include "libkita/kita_misc.h"
15 #include "libkita/threadinfo.h"
16 #include "libkita/signalcollection.h"
17 #include "libkita/parsemisc.h"
18 #include "libkita/datmanager.h"
19 #include "libkita/boardmanager.h"
20
21 #include <qmap.h>
22 #include <qapplication.h>
23 #include <qclipboard.h>
24 #include <qdatetime.h>
25 #include <qtoolbutton.h>
26 #include <qlabel.h>
27
28 #include <klocale.h>
29 #include <kpopupmenu.h>
30 #include <krun.h>
31 #include <kdebug.h>
32 #include <klistview.h>
33
34 FavoriteListView::FavoriteListView( QWidget* parent, const char* name )
35         : Kita::ThreadListView( parent, name )
36 {
37     subjectList->addColumn( i18n( "Board" ) );
38
39     KindLabel->hide();
40
41     Kita::SignalCollection* signalCollection = Kita::SignalCollection::getInstance();
42     connect( subjectList, SIGNAL( returnPressed( QListViewItem* ) ),
43              SLOT( loadThread( QListViewItem* ) ) );
44     connect( subjectList, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
45              SLOT( slotContextMenuRequested( QListViewItem*, const QPoint&, int ) ) );
46     connect( ReloadButton, SIGNAL( clicked() ),
47              SLOT( slotReloadButton() ) );
48     connect( signalCollection, SIGNAL( favoritesUpdated() ),
49              SLOT( update() ) );
50
51     connect( signalCollection, SIGNAL( updateSubjectTab( const KURL& ) ),
52              SLOT( slotUpdateSubject( const KURL& ) ) );
53 }
54
55 FavoriteListView::~FavoriteListView()
56 {}
57
58 void FavoriteListView::update()
59 {
60     // FIXME: KitaSubjectView::loadBoard()¤Ë¥³¥Ô¡¼
61     {
62         m_hitList.clear();
63         m_nextHitIndex = 0;
64         m_prevquery = "";
65     }
66
67     const QValueList<QString> threadList = FavoriteThreads::getInstance() -> threadList();
68
69     subjectList->clear();
70
71     KitaThreadInfo* cache = KitaThreadInfo::getInstance();
72
73     QValueList<QString>::const_iterator it;
74     for ( it = threadList.begin(); it != threadList.end(); ++it ) {
75         QString datURL = ( *it );
76
77         QDateTime since;
78         since.setTime_t( Kita::datToSince( datURL ) );
79
80         int readNum = cache->readNum( datURL );
81         int resNum = KitaThreadInfo::resNum( datURL );
82
83         KListViewItem* item = new KListViewItem( subjectList );
84         item->setText( Col_Board, Kita::DatManager::boardName( datURL ) );
85         item->setText( Col_Subject, Kita::unescape( Kita::Thread::getName( datURL ) ) );
86         item->setText( Col_Read, QString( "%1" ).arg( readNum, 4 ) );
87         if ( resNum > 0 ) {
88             item->setText( Col_ResNum, QString( "%1" ).arg( resNum, 4 ) );
89             if ( resNum != readNum ) {
90                 item->setText( Col_Unread, QString( "%1" ).arg( resNum - readNum, 4 ) );
91             }
92         }
93         item->setText( Col_Since, since.toString( "yy/MM/dd hh:mm" ) );
94         item->setText( Col_DatURL, datURL );
95     }
96     subjectList->setSorting( Col_Board );
97 }
98
99 void FavoriteListView::loadThread( QListViewItem* item )
100 {
101     if ( ! item ) return ;
102
103     const QValueList<QString> threadList = FavoriteThreads::getInstance() -> threadList();
104
105     QValueList<QString>::const_iterator it;
106     for ( it = threadList.begin(); it != threadList.end(); ++it ) {
107         QString datURL = ( *it );
108
109         if ( datURL == item->text( Col_DatURL ) ) {
110             emit openURLRequestExt( datURL, KParts::URLArgs(), "kita_open_2chthread", 0 );
111         }
112     }
113 }
114
115 void FavoriteListView::slotUpdateSubject( const KURL& url )
116 {
117     KURL datURL = Kita::ParseMisc::parseURLonly( url );
118     for ( QListViewItem * item = subjectList->firstChild(); item; item = item->nextSibling() ) {
119         if ( item->text( Col_DatURL ) == datURL.prettyURL() ) {
120             int resNum = KitaThreadInfo::resNum( datURL.prettyURL() );
121             int readNum = KitaThreadInfo::readNum( datURL.prettyURL() );
122             item->setText( Col_ResNum, QString( "%1" ).arg( resNum, 4 ) );
123             item->setText( Col_Read, QString( "%1" ).arg( readNum, 4 ) );
124         }
125     }
126 }
127
128 // TODO: KitaSubjectView¥¯¥é¥¹¤ÎƱ¥á¥½¥Ã¥É¤È¤Û¤È¤ó¤ÉƱ¤¸
129 void FavoriteListView::slotContextMenuRequested( QListViewItem* item, const QPoint& point, int )
130 {
131     enum {
132         Menu_OpenWithBrowser,
133         Menu_OpenWithNewTab,
134         Menu_CopyURL,
135         Menu_CopyTitleAndURL,
136         Menu_RemoveFromFavorites
137     };
138
139     if ( item == 0 ) {
140         return ;
141     }
142
143     KPopupMenu popup( 0 );
144     popup.insertItem( i18n( "Open with Web Browser" ), Menu_OpenWithBrowser );
145     popup.insertItem( i18n( "Open with new tab" ), Menu_OpenWithNewTab );
146     popup.insertItem( i18n( "Copy URL" ), Menu_CopyURL );
147     popup.insertItem( i18n( "Copy title and URL" ), Menu_CopyTitleAndURL );
148     popup.insertItem( i18n( "Remove from Favorites" ), Menu_RemoveFromFavorites );
149
150     QString datURL = item->text( Col_DatURL );
151     QString threadURL = Kita::DatManager::threadURL( datURL );
152
153     QClipboard* clipboard = QApplication::clipboard();
154
155     switch ( popup.exec( point ) ) {
156     case Menu_OpenWithBrowser:
157         KRun::runURL( Kita::DatManager::threadURL( datURL ), "text/html" );
158         break;
159     case Menu_OpenWithNewTab:
160         emit openURLRequestExt( datURL, KParts::URLArgs(), "kita_open_2chthread", 1 );
161         break;
162     case Menu_CopyURL:
163         clipboard->setText( threadURL );
164         break;
165     case Menu_CopyTitleAndURL:
166         clipboard->setText( Kita::Thread::getName( datURL ) + "\n" + threadURL );
167         break;
168     case Menu_RemoveFromFavorites:
169         emit bookmarked( datURL, false );
170         break;
171     default:
172         break;
173     }
174 }
175
176 void FavoriteListView::slotReloadButton()
177 {
178     QValueList<QString> boardList;
179
180     const QValueList<QString> threadList = FavoriteThreads::getInstance() -> threadList();
181     QValueList<QString>::const_iterator it;
182     for ( it = threadList.begin(); it != threadList.end(); ++it ) {
183         QString datURL = ( *it );
184         QString boardURL = Kita::datToBoard( datURL );
185         if ( boardList.contains( boardURL ) == 0 ) {
186             boardList.append( boardURL );
187         }
188     }
189
190     QValueList<QString>::const_iterator it2;
191     for ( it2 = boardList.begin(); it2 != boardList.end(); ++it2 ) {
192
193         bool online = TRUE;
194         QPtrList<Kita::Thread> threadList;
195         QPtrList<Kita::Thread> tmpList;
196         Kita::BoardManager::getThreadList( ( *it2 ), FALSE, online, threadList, tmpList );
197     }
198 }
199