1 /***************************************************************************
2 * Copyright (C) 2003 by Hideki Ikemoto *
3 * ikemo@users.sourceforge.jp *
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 ***************************************************************************/
11 #include "favoritelistview.h"
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"
20 #include <qapplication.h>
21 #include <qclipboard.h>
22 #include <qdatetime.h>
23 #include <qtoolbutton.h>
27 #include <kpopupmenu.h>
30 #include <klistview.h>
32 FavoriteListView::FavoriteListView( QWidget* parent, const char* name )
33 : Kita::ThreadListView( parent, name )
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() ),
47 connect( signalCollection, SIGNAL( updateSubjectTab( const KURL& ) ),
48 SLOT( slotUpdateSubject( const KURL& ) ) );
50 showColumn( Col_Board );
53 FavoriteListView::~FavoriteListView()
56 void FavoriteListView::update()
58 // FIXME: KitaBoardView::loadBoard()˥ԡ
67 for ( int i = 0; FavoriteThreads::count() > i; i++ ) {
68 QString datURL = FavoriteThreads::getDatURL( i );
71 since.setTime_t( Kita::datToSince( datURL ) );
73 int viewPos = Kita::DatManager::getViewPos( datURL );
74 int resNum = Kita::DatManager::getResNum( datURL );
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 ) );
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 ) );
86 item->setText( Col_Since, since.toString( "yy/MM/dd hh:mm" ) );
87 item->setText( Col_DatURL, datURL );
89 subjectList->setSorting( Col_Board );
92 void FavoriteListView::loadThread( QListViewItem* item )
94 if ( ! item ) return ;
96 for ( int i = 0; FavoriteThreads::count() > i; i++ ) {
97 QString datURL = FavoriteThreads::getDatURL( i );
98 qDebug( "FavoriteListView::loadThread(() datURL = %s", datURL.latin1() );
100 if ( datURL == item->text( Col_DatURL ) ) {
101 emit openThread( datURL );
106 void FavoriteListView::slotUpdateSubject( const KURL& url )
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 ) );
119 // TODO: KitaBoardView饹�åɤȤۤȤ�Ʊ
120 void FavoriteListView::slotContextMenuRequested( QListViewItem* item, const QPoint& point, int )
123 Menu_OpenWithBrowser,
126 Menu_CopyTitleAndURL,
127 Menu_RemoveFromFavorites
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 );
141 QString datURL = item->text( Col_DatURL );
142 QString threadURL = Kita::DatManager::threadURL( datURL );
144 QClipboard* clipboard = QApplication::clipboard();
147 switch ( popup.exec( point ) ) {
148 case Menu_OpenWithBrowser:
149 KRun::runURL( Kita::DatManager::threadURL( datURL ), "text/html" );
151 case Menu_OpenWithNewTab:
152 emit openThread( datURL );
155 clipboard->setText( threadURL );
157 case Menu_CopyTitleAndURL:
158 cliptxt = Kita::DatManager::threadName( datURL ) + "\n" + threadURL;
159 clipboard->setText( cliptxt , QClipboard::Clipboard );
160 clipboard->setText( cliptxt , QClipboard::Selection );
162 case Menu_RemoveFromFavorites:
163 emit bookmarked( datURL, false );
170 void FavoriteListView::slotReloadButton()
172 QValueList<QString> boardList;
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 );
183 QValueList<QString>::const_iterator it2;
184 for ( it2 = boardList.begin(); it2 != boardList.end(); ++it2 ) {
187 QPtrList<Kita::Thread> threadList;
188 QPtrList<Kita::Thread> tmpList;
189 Kita::BoardManager::getThreadList( ( *it2 ), FALSE, online, threadList, tmpList );