OSDN Git Service

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