You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ktorrent/apps/ktorrent/viewmanager.cpp

266 lines
5.8 KiB

/***************************************************************************
* Copyright (C) 2005 by Joris Guisson *
* joris.guisson@gmail.com *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#include <kconfig.h>
#include <klocale.h>
#include <ktabwidget.h>
#include <interfaces/torrentinterface.h>
#include <groups/group.h>
#include "viewmanager.h"
#include "ktorrentview.h"
#include "ktorrent.h"
typedef TQValueList<KTorrentView*>::iterator ViewItr;
ViewManager::ViewManager ( TQObject *parent, const char *name )
: TQObject ( parent, name ),current(0)
{}
ViewManager::~ViewManager()
{}
KTorrentView* ViewManager::newView()
{
KTorrentView* v = new KTorrentView(0);
views.append(v);
return v;
}
void ViewManager::saveViewState(TDEConfig* cfg)
{
TQStringList cv;
int idx = 0;
for (ViewItr i = views.begin();i != views.end();i++)
{
cv.append((*i)->getCurrentGroup()->groupName());
(*i)->saveSettings(cfg,idx++);
}
cfg->setGroup("ViewManager");
cfg->writeEntry("current_views",cv);
}
void ViewManager::restoreViewState(TDEConfig* cfg,KTorrent* ktor)
{
TQStringList def;
def.append(i18n("Downloads"));
def.append(i18n("Uploads"));
cfg->setGroup("ViewManager");
TQStringList to_load = cfg->readListEntry("current_views",def);
if (to_load.empty())
to_load = def;
for (TQStringList::iterator i = to_load.begin();i != to_load.end();i++)
{
ktor->openView(*i);
}
if (views.count() == 0)
{
// no view open, so open default ones
for (TQStringList::iterator i = def.begin();i != def.end();i++)
ktor->openView(*i);
}
// load status for each view
int idx = 0;
for (ViewItr i = views.begin();i != views.end();i++)
{
(*i)->loadSettings(cfg,idx++);
}
}
void ViewManager::updateActions()
{
if (current)
current->updateActions();
}
void ViewManager::addTorrent(kt::TorrentInterface* tc)
{
for (ViewItr i = views.begin();i != views.end();i++)
{
(*i)->addTorrent(tc);
}
}
void ViewManager::removeTorrent(kt::TorrentInterface* tc)
{
for (ViewItr i = views.begin();i != views.end();i++)
{
(*i)->removeTorrent(tc);
}
}
void ViewManager::startDownloads()
{
if (current)
current->startDownloads();
}
void ViewManager::stopDownloads()
{
if (current)
current->stopDownloads();
}
void ViewManager::startAllDownloads()
{
if (current)
current->startAllDownloads();
}
void ViewManager::stopAllDownloads()
{
if (current)
current->stopAllDownloads();
}
void ViewManager::removeDownloads()
{
if (current)
current->removeDownloads();
}
kt::TorrentInterface* ViewManager::getCurrentTC()
{
return current ? current->getCurrentTC() : 0;
}
void ViewManager::update()
{
// update the caption of each view if necessary
for (ViewItr i = views.begin();i != views.end();i++)
{
if (*i != current)
{
KTorrentView* w = *i;
w->updateCaption();
}
}
if (current)
current->update();
}
void ViewManager::queueAction()
{
if (current)
current->queueSlot();
}
void ViewManager::checkDataIntegrity()
{
if (current)
current->checkDataIntegrity();
}
void ViewManager::getSelection(TQValueList<kt::TorrentInterface*> & sel)
{
if (current)
current->getSelection(sel);
}
void ViewManager::onCurrentTabChanged(TQWidget* w)
{
KTorrentView* old = current;
current = 0;
for (ViewItr i = views.begin();i != views.end() && !current;i++)
{
if (w == *i)
current = *i;
}
if (!current)
current = old;
else
{
current->update();
current->updateActions();
}
}
bool ViewManager::closeAllowed(TQWidget* )
{
return views.count() > 1;
}
void ViewManager::tabCloseRequest(kt::GUIInterface* gui,TQWidget* tab)
{
for (ViewItr i = views.begin();i != views.end();i++)
{
if (tab == *i)
{
if (current == *i)
current = 0;
gui->removeTabPage(tab);
delete tab;
views.erase(i);
break;
}
}
}
void ViewManager::groupRenamed(kt::Group* g,KTabWidget* mtw)
{
for (ViewItr i = views.begin();i != views.end();i++)
{
KTorrentView* v = *i;
if (v->getCurrentGroup() == g)
{
mtw->changeTab(v,g->groupName());
v->setIcon(g->groupIcon());
v->setCurrentGroup(g);
}
}
}
void ViewManager::groupRemoved(kt::Group* g,KTabWidget* mtw,kt::GUIInterface* gui,kt::Group* all_group)
{
for (ViewItr i = views.begin();i != views.end();)
{
KTorrentView* v = *i;
if (v->getCurrentGroup() == g)
{
if (views.count() > 1)
{
// close the tab
gui->removeTabPage(v);
delete v;
i = views.erase(i);
}
else
{
mtw->changeTab(v,all_group->groupName());
v->setIcon(all_group->groupIcon());
v->setCurrentGroup(all_group);
i++;
}
}
else
i++;
}
}
#include "viewmanager.moc"