yacreader/YACReaderLibrary/yacreader_history_controller.cpp

109 lines
2.9 KiB
C++

#include "yacreader_history_controller.h"
YACReaderHistoryController::YACReaderHistoryController(QObject *parent) :
QObject(parent)
{
}
void YACReaderHistoryController::clear()
{
currentFolderNavigation = 0;
history.clear();
history.append(YACReaderLibrarySourceContainer(QModelIndex(),YACReaderLibrarySourceContainer::Folder)); //root folder is always the first item
emit(enabledBackward(false));
emit(enabledForward(false));
}
void YACReaderHistoryController::backward()
{
if(currentFolderNavigation>0)
{
currentFolderNavigation--;
emit(modelIndexSelected(history.at(currentFolderNavigation)));
emit(enabledForward(true));
}
if(currentFolderNavigation==0)
emit(enabledBackward(false));
}
void YACReaderHistoryController::forward()
{
if(currentFolderNavigation<history.count()-1)
{
currentFolderNavigation++;
emit(modelIndexSelected(history.at(currentFolderNavigation)));
emit(enabledBackward(true));
}
if(currentFolderNavigation==history.count()-1)
emit(enabledForward(false));
}
void YACReaderHistoryController::updateHistory(const YACReaderLibrarySourceContainer &source)
{
//remove history from current index
if(!source.sourceModelIndex.isValid() && history.count() == 1)
return;
int numElementsToRemove = history.count() - (currentFolderNavigation+1);
while(numElementsToRemove>0)
{
numElementsToRemove--;
history.removeLast();
}
if(source!=history.at(currentFolderNavigation))
{
history.append(source);
emit(enabledBackward(true));
currentFolderNavigation++;
}
emit(enabledForward(false));
}
YACReaderLibrarySourceContainer YACReaderHistoryController::lastSourceContainer()
{
return history.last();
}
YACReaderLibrarySourceContainer YACReaderHistoryController::currentSourceContainer()
{
return history.at(currentFolderNavigation);
}
//------------------------------------------------------------------------------
YACReaderLibrarySourceContainer::YACReaderLibrarySourceContainer()
:sourceModelIndex(QModelIndex()),type(None)
{
}
YACReaderLibrarySourceContainer::YACReaderLibrarySourceContainer(const QModelIndex &sourceModelIndex, YACReaderLibrarySourceContainer::SourceType type)
:sourceModelIndex(sourceModelIndex),type(type)
{}
QModelIndex YACReaderLibrarySourceContainer::getSourceModelIndex() const
{
return sourceModelIndex;
}
YACReaderLibrarySourceContainer::SourceType YACReaderLibrarySourceContainer::getType() const
{
return type;
}
bool YACReaderLibrarySourceContainer::operator==(const YACReaderLibrarySourceContainer &other) const
{
return sourceModelIndex == other.sourceModelIndex && type == other.type;
}
bool YACReaderLibrarySourceContainer::operator!=(const YACReaderLibrarySourceContainer &other) const
{
return !(*this == other);
}