OSDN Git Service

Add BoardDatabase class
[kita/kita.git] / kita / src / favoritelistview.cpp
index b7dacf4..5dedde1 100644 (file)
 
 #include "favoritelistview.h"
 
-#include "libkita/favoritethreads.h"
-#include "libkita/kita_misc.h"
-#include "libkita/signalcollection.h"
-#include "libkita/datmanager.h"
-#include "libkita/boardmanager.h"
-
-#include <qmap.h>
-#include <qapplication.h>
-#include <qclipboard.h>
-#include <qdatetime.h>
-#include <qtoolbutton.h>
-#include <qlabel.h>
+#include <QtCore/QDateTime>
+#include <QtGui/QApplication>
+#include <QtGui/QClipboard>
+#include <QtGui/QTableWidgetItem>
 
-#include <klocale.h>
-#include <kpopupmenu.h>
+#include <kaction.h>
+#include <kmenu.h>
 #include <krun.h>
-#include <kdebug.h>
-#include <klistview.h>
 
-FavoriteListView::FavoriteListView( QWidget* parent, const char* name )
-        : Kita::ThreadListView( parent, name )
-{
-    subjectList->addColumn( i18n( "Board" ) );
-
-    KindLabel->hide();
-
-    Kita::SignalCollection* signalCollection = Kita::SignalCollection::getInstance();
-    connect( subjectList, SIGNAL( returnPressed( QListViewItem* ) ),
-             SLOT( loadThread( QListViewItem* ) ) );
-    connect( subjectList, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint&, int ) ),
-             SLOT( slotContextMenuRequested( QListViewItem*, const QPoint&, int ) ) );
-    connect( ReloadButton, SIGNAL( clicked() ),
-             SLOT( slotReloadButton() ) );
-    connect( signalCollection, SIGNAL( favoritesUpdated() ),
-             SLOT( update() ) );
-
-    connect( signalCollection, SIGNAL( updateSubjectTab( const KURL& ) ),
-             SLOT( slotUpdateSubject( const KURL& ) ) );
-}
+#include "threadlistviewitem.h"
+#include "viewmediator.h"
+#include "libkita/boarddatabase.h"
+#include "libkita/datmanager.h"
+#include "libkita/favoritethreads.h"
+#include "libkita/kita_misc.h"
+#include "libkita/thread.h"
 
-FavoriteListView::~FavoriteListView()
-{}
+using namespace Kita;
 
-void FavoriteListView::update()
+/**
+ *
+ */
+FavoriteListView::FavoriteListView(QWidget* parent) : ThreadListView(parent)
 {
-    // FIXME: KitaSubjectView::loadBoard()¤Ë¥³¥Ô¡¼
-    {
-        m_hitList.clear();
-        m_nextHitIndex = 0;
-        m_prevquery = "";
-    }
-
-    const QValueList<QString> threadList = FavoriteThreads::getInstance() -> threadList();
-
-    subjectList->clear();
+    kindLabel->hide();
 
-    QValueList<QString>::const_iterator it;
-    for ( it = threadList.begin(); it != threadList.end(); ++it ) {
-        QString datURL = ( *it );
+    connect(subjectList, SIGNAL(itemClicked(QTableWidgetItem*)),
+             SLOT(loadThread(QTableWidgetItem*)));
+    connect(reloadButton, SIGNAL(clicked()),
+             SLOT(reload()));
 
-        QDateTime since;
-        since.setTime_t( Kita::datToSince( datURL ) );
-
-        int viewPos = Kita::DatManager::getViewPos( datURL );
-        int resNum = Kita::DatManager::getResNum( datURL );
-
-        KListViewItem* item = new KListViewItem( subjectList );
-        item->setText( Col_Board, Kita::BoardManager::boardName( datURL ) );
-        item->setText( Col_Subject, Kita::DatManager::threadName( datURL ) );
-        item->setText( Col_Read, QString( "%1" ).arg( viewPos, 4 ) );
-        if ( resNum > 0 ) {
-            item->setText( Col_ResNum, QString( "%1" ).arg( resNum, 4 ) );
-            if ( resNum != viewPos ) {
-                item->setText( Col_Unread, QString( "%1" ).arg( resNum - viewPos, 4 ) );
-            }
-        }
-        item->setText( Col_Since, since.toString( "yy/MM/dd hh:mm" ) );
-        item->setText( Col_DatURL, datURL );
-    }
-    subjectList->setSorting( Col_Board );
+    showColumn(ColumnBoard);
 }
 
-void FavoriteListView::loadThread( QListViewItem* item )
+/**
+ *
+ */
+void FavoriteListView::refresh()
 {
-    if ( ! item ) return ;
-
-    const QValueList<QString> threadList = FavoriteThreads::getInstance() -> threadList();
-
-    QValueList<QString>::const_iterator it;
-    for ( it = threadList.begin(); it != threadList.end(); ++it ) {
-        QString datURL = ( *it );
-
-        if ( datURL == item->text( Col_DatURL ) ) {
-            emit openURLRequestExt( datURL, KParts::URLArgs(), "kita_open_2chthread", 0 );
+    // clear
+    m_hitList.clear();
+    m_nextHitIndex = 0;
+    m_prevquery = QStringList();
+
+    subjectList->clearContents();
+
+    subjectList->setSortingEnabled(false);
+    int count = FavoriteThreads::count();
+    subjectList->setRowCount(count);
+    for (int i = 0; i < count; i++) {
+        for (int j = 0, k = subjectList->columnCount(); j < k; j++) {
+            ThreadListViewItem* item = new ThreadListViewItem(j);
+            subjectList->setItem(i, j, item);
         }
     }
-}
+    subjectList->setSortingEnabled(true);
+    // insert item.
+    for (int i = 0; i < count; i++) {
+        QString datUrl = FavoriteThreads::getDatUrl(i);
 
-void FavoriteListView::slotUpdateSubject( const KURL& url )
-{
-    KURL datURL = Kita::getDatURL( url );
-    for ( QListViewItem * item = subjectList->firstChild(); item; item = item->nextSibling() ) {
-        if ( item->text( Col_DatURL ) == datURL.prettyURL() ) {
-            int resNum = Kita::DatManager::getResNum( datURL );
-            int viewPos = Kita::DatManager::getViewPos( datURL );
-            item->setText( Col_ResNum, QString( "%1" ).arg( resNum, 4 ) );
-            item->setText( Col_Read, QString( "%1" ).arg( viewPos, 4 ) );
+        QDateTime since;
+        since.setTime_t(datToSince(datUrl));
+
+        DatManager datManager(datUrl);
+        int viewPos = datManager.getViewPos();
+        int resNum = datManager.getResNum();
+
+        BoardDatabase db(datUrl);
+        subjectList->item(i, ColumnBoard)->setText(db.boardName());
+        subjectList->item(i, ColumnSubject)
+            ->setText(datManager.threadName());
+        subjectList->item(i, ColumnReadNum)
+            ->setText(QString("%1").arg(viewPos, 4));
+        if (resNum > 0) {
+            subjectList->item(i, ColumnResNum)
+                ->setText(QString("%1").arg(resNum, 4));
         }
+        if (resNum != 0 && resNum != viewPos) {
+            subjectList->item(i, ColumnUnread)
+                ->setText(QString("%1").arg(resNum - viewPos, 4));
+        }
+        subjectList->item(i, ColumnSince)
+            ->setText(since.toString("yy/MM/dd hh:mm"));
+        subjectList->item(i, ColumnDatUrl)->setText(datUrl);
+    }
+    subjectList->sortItems(ColumnBoard);
+    for (int i = 0, j = subjectList->columnCount(); i < j; i++) {
+        subjectList->resizeColumnToContents(i);
+    }
+    for (int i = 0, j = subjectList->rowCount(); i < j; i++) {
+        subjectList->resizeRowToContents(i);
     }
 }
 
-// TODO: KitaSubjectView¥¯¥é¥¹¤ÎƱ¥á¥½¥Ã¥É¤È¤Û¤È¤ó¤ÉƱ¤¸
-void FavoriteListView::slotContextMenuRequested( QListViewItem* item, const QPoint& point, int )
+/**
+ *
+ */
+void FavoriteListView::loadThread(QTableWidgetItem* item)
 {
-    enum {
-        Menu_OpenWithBrowser,
-        Menu_OpenWithNewTab,
-        Menu_CopyURL,
-        Menu_CopyTitleAndURL,
-        Menu_RemoveFromFavorites
-    };
-
-    if ( item == 0 ) {
-        return ;
-    }
+    if (! item) return ;
+
+    QString itemUrl = subjectList->item(item->row(), ColumnDatUrl)->text();
+
+    for (int i = 0; FavoriteThreads::count() > i; i++) {
+        QString datUrl = FavoriteThreads::getDatUrl(i);
 
-    KPopupMenu popup( 0 );
-    popup.insertItem( i18n( "Open with Web Browser" ), Menu_OpenWithBrowser );
-    popup.insertItem( i18n( "Open with new tab" ), Menu_OpenWithNewTab );
-    popup.insertItem( i18n( "Copy URL" ), Menu_CopyURL );
-    popup.insertItem( i18n( "Copy title and URL" ), Menu_CopyTitleAndURL );
-    popup.insertItem( i18n( "Remove from Favorites" ), Menu_RemoveFromFavorites );
-
-    QString datURL = item->text( Col_DatURL );
-    QString threadURL = Kita::DatManager::threadURL( datURL );
-
-    QClipboard* clipboard = QApplication::clipboard();
-    QString cliptxt;
-
-    switch ( popup.exec( point ) ) {
-    case Menu_OpenWithBrowser:
-        KRun::runURL( Kita::DatManager::threadURL( datURL ), "text/html" );
-        break;
-    case Menu_OpenWithNewTab:
-        emit openURLRequestExt( datURL, KParts::URLArgs(), "kita_open_2chthread", 1 );
-        break;
-    case Menu_CopyURL:
-        clipboard->setText( threadURL );
-        break;
-    case Menu_CopyTitleAndURL:
-       cliptxt = Kita::DatManager::threadName( datURL ) + "\n" + threadURL;
-       clipboard->setText( cliptxt , QClipboard::Clipboard );
-       clipboard->setText( cliptxt , QClipboard::Selection );
-        break;
-    case Menu_RemoveFromFavorites:
-        emit bookmarked( datURL, false );
-        break;
-    default:
-        break;
+        if (datUrl == itemUrl) {
+            ViewMediator::getInstance()->openThread(datUrl);
+        }
     }
 }
 
-void FavoriteListView::slotReloadButton()
+/**
+ *
+ */
+void FavoriteListView::reload()
 {
-    QValueList<QString> boardList;
-
-    const QValueList<QString> threadList = FavoriteThreads::getInstance() -> threadList();
-    QValueList<QString>::const_iterator it;
-    for ( it = threadList.begin(); it != threadList.end(); ++it ) {
-        QString datURL = ( *it );
-        QString boardURL = Kita::datToBoard( datURL );
-        if ( boardList.contains( boardURL ) == 0 ) {
-            boardList.append( boardURL );
+    QList<QString> boardList;
+
+    for (int i = 0; FavoriteThreads::count() > i; i++) {
+        QString datUrl = FavoriteThreads::getDatUrl(i);
+        BoardDatabase db(datUrl);
+        QString boardUrl = db.boardUrl();
+        if (boardList.contains(boardUrl) == 0) {
+            boardList.append(boardUrl);
         }
     }
 
-    QValueList<QString>::const_iterator it2;
-    for ( it2 = boardList.begin(); it2 != boardList.end(); ++it2 ) {
-
-       bool online = TRUE;
-       QPtrList<Kita::Thread> threadList;
-       QPtrList<Kita::Thread> tmpList;
-       Kita::BoardManager::getThreadList( ( *it2 ), FALSE, online, threadList, tmpList );
+    QList<QString>::const_iterator it;
+    for (it = boardList.begin(); it != boardList.end(); ++it) {
+        bool online = true;
+        QList<Thread*> threadList;
+        QList<Thread*> tmpList;
+        BoardDatabase db((*it));
+        db.getThreadList(false, online, threadList, tmpList);
     }
 }
-