OSDN Git Service

move files.
[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/signalcollection.h"
16 #include "libkita/datmanager.h"
17 #include "libkita/boardmanager.h"
18
19 #include <qmap.h>
20 #include <qapplication.h>
21 #include <qclipboard.h>
22 #include <qdatetime.h>
23 #include <qtoolbutton.h>
24 #include <qlabel.h>
25
26 #include <klocale.h>
27 #include <kpopupmenu.h>
28 #include <krun.h>
29 #include <kdebug.h>
30 #include <klistview.h>
31
32 FavoriteListView::FavoriteListView( QWidget* parent, const char* name )
33         : Kita::ThreadListView( parent, name )
34 {
35     KindLabel->hide();
36
37     Kita::SignalCollection* signalCollection = Kita::SignalCollection::getInstance();
38     connect( subjectList, SIGNAL( returnPressed( QListViewItem* ) ),
39              SLOT( loadThread( QListViewItem* ) ) );
40     connect( subjectList, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
41              SLOT( slotContextMenuRequested( QListViewItem*, const QPoint&, int ) ) );
42     connect( ReloadButton, SIGNAL( clicked() ),
43              SLOT( slotReloadButton() ) );
44     connect( signalCollection, SIGNAL( favoritesUpdated() ),
45              SLOT( update() ) );
46
47     connect( signalCollection, SIGNAL( updateSubjectTab( const KURL& ) ),
48              SLOT( slotUpdateSubject( const KURL& ) ) );
49
50     showColumn( Col_Board );
51 }
52
53 FavoriteListView::~FavoriteListView()
54 {}
55
56 void FavoriteListView::update()
57 {
58     // FIXME: KitaBoardView::loadBoard()˥ԡ
59     {
60         m_hitList.clear();
61         m_nextHitIndex = 0;
62         m_prevquery = "";
63     }
64
65     subjectList->clear();
66
67     for ( int i = 0; FavoriteThreads::count() > i; i++ ) {
68         QString datURL = FavoriteThreads::getDatURL( i );
69
70         QDateTime since;
71         since.setTime_t( Kita::datToSince( datURL ) );
72
73         int viewPos = Kita::DatManager::getViewPos( datURL );
74         int resNum = Kita::DatManager::getResNum( datURL );
75
76         KListViewItem* item = new KListViewItem( subjectList );
77         item->setText( Col_Board, Kita::BoardManager::boardName( datURL ) );
78         item->setText( Col_Subject, Kita::DatManager::threadName( datURL ) );
79         item->setText( Col_ReadNum, QString( "%1" ).arg( viewPos, 4 ) );
80         if ( resNum > 0 ) {
81             item->setText( Col_ResNum, QString( "%1" ).arg( resNum, 4 ) );
82             if ( resNum != viewPos ) {
83                 item->setText( Col_Unread, QString( "%1" ).arg( resNum - viewPos, 4 ) );
84             }
85         }
86         item->setText( Col_Since, since.toString( "yy/MM/dd hh:mm" ) );
87         item->setText( Col_DatURL, datURL );
88     }
89     subjectList->setSorting( Col_Board );
90 }
91
92 void FavoriteListView::loadThread( QListViewItem* item )
93 {
94     if ( ! item ) return ;
95
96     for ( int i = 0; FavoriteThreads::count() > i; i++ ) {
97         QString datURL = FavoriteThreads::getDatURL( i );
98         qDebug( "FavoriteListView::loadThread(() datURL = %s", datURL.latin1() );
99
100         if ( datURL == item->text( Col_DatURL ) ) {
101             emit openThread( datURL );
102         }
103     }
104 }
105
106 void FavoriteListView::slotUpdateSubject( const KURL& url )
107 {
108     KURL datURL = Kita::getDatURL( url );
109     for ( QListViewItem * item = subjectList->firstChild(); item; item = item->nextSibling() ) {
110         if ( item->text( Col_DatURL ) == datURL.prettyURL() ) {
111             int resNum = Kita::DatManager::getResNum( datURL );
112             int viewPos = Kita::DatManager::getViewPos( datURL );
113             item->setText( Col_ResNum, QString( "%1" ).arg( resNum, 4 ) );
114             item->setText( Col_ReadNum, QString( "%1" ).arg( viewPos, 4 ) );
115         }
116     }
117 }
118
119 // TODO: KitaBoardView饹�᥽åɤȤۤȤ�Ʊ
120 void FavoriteListView::slotContextMenuRequested( QListViewItem* item, const QPoint& point, int )
121 {
122     enum {
123         Menu_OpenWithBrowser,
124         Menu_OpenWithNewTab,
125         Menu_CopyURL,
126         Menu_CopyTitleAndURL,
127         Menu_RemoveFromFavorites
128     };
129
130     if ( item == 0 ) {
131         return ;
132     }
133
134     KPopupMenu popup( 0 );
135     popup.insertItem( i18n( "Open with Web Browser" ), Menu_OpenWithBrowser );
136     popup.insertItem( i18n( "Open with new tab" ), Menu_OpenWithNewTab );
137     popup.insertItem( i18n( "Copy URL" ), Menu_CopyURL );
138     popup.insertItem( i18n( "Copy title and URL" ), Menu_CopyTitleAndURL );
139     popup.insertItem( i18n( "Remove from Favorites" ), Menu_RemoveFromFavorites );
140
141     QString datURL = item->text( Col_DatURL );
142     QString threadURL = Kita::DatManager::threadURL( datURL );
143
144     QClipboard* clipboard = QApplication::clipboard();
145     QString cliptxt;
146
147     switch ( popup.exec( point ) ) {
148     case Menu_OpenWithBrowser:
149         KRun::runURL( Kita::DatManager::threadURL( datURL ), "text/html" );
150         break;
151     case Menu_OpenWithNewTab:
152         emit openThread( datURL );
153         break;
154     case Menu_CopyURL:
155         clipboard->setText( threadURL );
156         break;
157     case Menu_CopyTitleAndURL:
158         cliptxt = Kita::DatManager::threadName( datURL ) + "\n" + threadURL;
159         clipboard->setText( cliptxt , QClipboard::Clipboard );
160         clipboard->setText( cliptxt , QClipboard::Selection );
161         break;
162     case Menu_RemoveFromFavorites:
163         emit bookmarked( datURL, false );
164         break;
165     default:
166         break;
167     }
168 }
169
170 void FavoriteListView::slotReloadButton()
171 {
172     QValueList<QString> boardList;
173
174     for ( int i = 0; FavoriteThreads::count() > i; i++ ) {
175         QString datURL = FavoriteThreads::getDatURL( i );
176         qDebug( "FavoriteListView::update() datURL = %s", datURL.latin1() );
177         QString boardURL = Kita::BoardManager::boardURL( datURL );
178         if ( boardList.contains( boardURL ) == 0 ) {
179             boardList.append( boardURL );
180         }
181     }
182
183     QValueList<QString>::const_iterator it2;
184     for ( it2 = boardList.begin(); it2 != boardList.end(); ++it2 ) {
185
186         bool online = TRUE;
187         QPtrList<Kita::Thread> threadList;
188         QPtrList<Kita::Thread> tmpList;
189         Kita::BoardManager::getThreadList( ( *it2 ), FALSE, online, threadList, tmpList );
190     }
191     emit update();
192 }
193