OSDN Git Service

Add BoardDatabase class
[kita/kita.git] / kita / src / favoritelistview.cpp
index 6e757ed..5dedde1 100644 (file)
 
 #include "favoritelistview.h"
 
-#include "viewmediator.h"
+#include <QtCore/QDateTime>
+#include <QtGui/QApplication>
+#include <QtGui/QClipboard>
+#include <QtGui/QTableWidgetItem>
+
+#include <kaction.h>
+#include <kmenu.h>
+#include <krun.h>
 
+#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/datmanager.h"
-#include "libkita/boardmanager.h"
 #include "libkita/thread.h"
 
-#include <qapplication.h>
-#include <qclipboard.h>
-#include <qdatetime.h>
-#include <qtoolbutton.h>
-#include <qlabel.h>
-
-#include <klocale.h>
-#include <kpopupmenu.h>
-#include <krun.h>
-#include <klistview.h>
+using namespace Kita;
 
 /**
  *
  */
-FavoriteListView::FavoriteListView( QWidget* parent, const char* name )
-        : Kita::ThreadListView( parent, name )
+FavoriteListView::FavoriteListView(QWidget* parent) : ThreadListView(parent)
 {
-    KindLabel->hide();
+    kindLabel->hide();
 
-    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( reload() ) );
+    connect(subjectList, SIGNAL(itemClicked(QTableWidgetItem*)),
+             SLOT(loadThread(QTableWidgetItem*)));
+    connect(reloadButton, SIGNAL(clicked()),
+             SLOT(reload()));
 
-    showColumn( Col_Board );
+    showColumn(ColumnBoard);
 }
 
 /**
  *
  */
-FavoriteListView::~FavoriteListView()
-{}
-
-/**
- *
- */
 void FavoriteListView::refresh()
 {
     // clear
     m_hitList.clear();
     m_nextHitIndex = 0;
-    m_prevquery = "";
+    m_prevquery = QStringList();
 
-    subjectList->clear();
+    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; FavoriteThreads::count() > i; i++ ) {
-        QString datURL = FavoriteThreads::getDatURL( i );
+    for (int i = 0; i < count; i++) {
+        QString datUrl = FavoriteThreads::getDatUrl(i);
 
         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_ReadNum, QString( "%1" ).arg( viewPos, 4 ) );
-        if ( resNum > 0 ) {
-            item->setText( Col_ResNum, QString( "%1" ).arg( resNum, 4 ) );
+        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 ) {
-            item->setText( Col_Unread, QString( "%1" ).arg( resNum - viewPos, 4 ) );
+        if (resNum != 0 && resNum != viewPos) {
+            subjectList->item(i, ColumnUnread)
+                ->setText(QString("%1").arg(resNum - viewPos, 4));
         }
-        item->setText( Col_Since, since.toString( "yy/MM/dd hh:mm" ) );
-        item->setText( Col_DatURL, datURL );
+        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);
     }
-    subjectList->setSorting( Col_Board );
 }
 
 /**
  *
  */
-void FavoriteListView::loadThread( QListViewItem* item )
+void FavoriteListView::loadThread(QTableWidgetItem* item)
 {
-    if ( ! item ) return ;
+    if (! item) return ;
 
-    QString itemURL = item->text( Col_DatURL );
+    QString itemUrl = subjectList->item(item->row(), ColumnDatUrl)->text();
 
-    for ( int i = 0; FavoriteThreads::count() > i; i++ ) {
-        QString datURL = FavoriteThreads::getDatURL( i );
+    for (int i = 0; FavoriteThreads::count() > i; i++) {
+        QString datUrl = FavoriteThreads::getDatUrl(i);
 
-        if ( datURL == itemURL ) {
-            ViewMediator::getInstance()->openThread( datURL );
+        if (datUrl == itemUrl) {
+            ViewMediator::getInstance()->openThread(datUrl);
         }
     }
 }
 
 /**
- * show and exec popup menu.
- */
-void FavoriteListView::slotContextMenuRequested( QListViewItem* item, const QPoint& point, int )
-{
-    if ( ! item ) {
-        return;
-    }
-
-    enum {
-        Menu_OpenWithBrowser,
-        Menu_CopyURL,
-        Menu_CopyTitleAndURL,
-        Menu_RemoveFromFavorites
-    };
-
-    KPopupMenu popup( 0 );
-    popup.insertItem( i18n( "Open with Web Browser" ), Menu_OpenWithBrowser );
-    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 clipText;
-
-    switch ( popup.exec( point ) ) {
-    case Menu_OpenWithBrowser:
-        KRun::runURL( Kita::DatManager::threadURL( datURL ), "text/html" );
-        break;
-    case Menu_CopyURL:
-        clipboard->setText( threadURL );
-        break;
-    case Menu_CopyTitleAndURL:
-        clipText = Kita::DatManager::threadName( datURL ) + "\n" + threadURL;
-        clipboard->setText( clipText , QClipboard::Clipboard );
-        clipboard->setText( clipText , QClipboard::Selection );
-        break;
-    case Menu_RemoveFromFavorites:
-        ViewMediator::getInstance()->bookmark( datURL, FALSE );
-        break;
-    default:
-        break;
-    }
-}
-
-/**
  *
  */
 void FavoriteListView::reload()
 {
-    QValueList<QString> boardList;
-
-    for ( int i = 0; FavoriteThreads::count() > i; i++ ) {
-        QString datURL = FavoriteThreads::getDatURL( i );
-        QString boardURL = Kita::BoardManager::boardURL( 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 it;
-    for ( it = boardList.begin(); it != boardList.end(); ++it ) {
-        bool online = TRUE;
-        QPtrList<Kita::Thread> threadList;
-        QPtrList<Kita::Thread> tmpList;
-        Kita::BoardManager::getThreadList( ( *it ), 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);
     }
 }