mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-17 12:40:35 +01:00
Nettoyage du trunk : deplacement des sources dans un sous-repertoire
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@364 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
132
sources/recentfiles.cpp
Normal file
132
sources/recentfiles.cpp
Normal file
@@ -0,0 +1,132 @@
|
||||
#include "recentfiles.h"
|
||||
#include "qetapp.h"
|
||||
|
||||
RecentFiles::RecentFiles(const QString &identifier, int size, QObject *parent) :
|
||||
QObject(parent),
|
||||
identifier_(identifier.isEmpty() ? "unnamed" : identifier),
|
||||
size_(size > 0 ? size : 10),
|
||||
menu_(0)
|
||||
{
|
||||
mapper_ = new QSignalMapper(this);
|
||||
connect(mapper_, SIGNAL(mapped(const QString &)), this, SLOT(handleMenuRequest(const QString &)));
|
||||
|
||||
extractFilesFromSettings();
|
||||
buildMenu();
|
||||
}
|
||||
|
||||
/**
|
||||
Destructeur
|
||||
@todo determiner s'il faut detruire ou non le menu
|
||||
*/
|
||||
RecentFiles::~RecentFiles() {
|
||||
delete menu_;
|
||||
}
|
||||
|
||||
/**
|
||||
@return le nombre de fichiers a retenir
|
||||
*/
|
||||
int RecentFiles::size() const {
|
||||
return(size_);
|
||||
}
|
||||
|
||||
/**
|
||||
@return un menu listant les derniers fichiers ouverts
|
||||
*/
|
||||
QMenu *RecentFiles::menu() const {
|
||||
return(menu_);
|
||||
}
|
||||
|
||||
/**
|
||||
Oublie les fichiers recents
|
||||
*/
|
||||
void RecentFiles::clear() {
|
||||
list_.clear();
|
||||
buildMenu();
|
||||
}
|
||||
|
||||
/**
|
||||
Sauvegarde les fichiers r<>cents dans la configuration
|
||||
*/
|
||||
void RecentFiles::save() {
|
||||
saveFilesToSettings();
|
||||
}
|
||||
|
||||
/**
|
||||
Gere les actions sur le menu
|
||||
*/
|
||||
void RecentFiles::handleMenuRequest(const QString &filepath) {
|
||||
emit(fileOpeningRequested(filepath));
|
||||
}
|
||||
|
||||
/**
|
||||
Gere le fait qu'un fichier ait ete ouvert
|
||||
@param filepath Chemin du fichier ouvert
|
||||
*/
|
||||
void RecentFiles::fileWasOpened(const QString &filepath) {
|
||||
insertFile(filepath);
|
||||
buildMenu();
|
||||
}
|
||||
|
||||
/**
|
||||
lit la liste des fichiers recents dans la configuration
|
||||
*/
|
||||
void RecentFiles::extractFilesFromSettings() {
|
||||
// oublie la liste des fichiers recents
|
||||
list_.clear();
|
||||
|
||||
// recupere les derniers fichiers ouverts dans la configuration
|
||||
for (int i = size_ ; i >= 1 ; -- i) {
|
||||
QString key(identifier_ + "-recentfiles/file" + QString::number(i));
|
||||
QString value(QETApp::settings().value(key, QString()).toString());
|
||||
insertFile(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Insere un fichier dans la liste des fichiers recents
|
||||
*/
|
||||
void RecentFiles::insertFile(const QString &filepath) {
|
||||
// evite d'inserer un chemin de fichier vide ou en double
|
||||
if (filepath.isEmpty()) return;
|
||||
list_.removeAll(filepath);
|
||||
|
||||
// insere le chemin de fichier
|
||||
list_.push_front(filepath);
|
||||
|
||||
// s'assure que l'on ne retient pas plus de fichiers que necessaire
|
||||
while (list_.count() > size_) list_.removeLast();
|
||||
}
|
||||
|
||||
/**
|
||||
ecrit la liste des fichiers recents dans la configuration
|
||||
*/
|
||||
void RecentFiles::saveFilesToSettings() {
|
||||
for (int i = 0 ; i < size_ && i < list_.count() ; ++ i) {
|
||||
QString key(identifier_ + "-recentfiles/file" + QString::number(i + 1));
|
||||
QETApp::settings().setValue(key, list_[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Construit le menu
|
||||
*/
|
||||
void RecentFiles::buildMenu() {
|
||||
// reinitialise le menu
|
||||
if (!menu_) {
|
||||
menu_ = new QMenu(tr("&R\351cemment ouvert(s)"));
|
||||
menu_ -> setIcon(QIcon(":/ico/open.png"));
|
||||
} else {
|
||||
menu_ -> clear();
|
||||
}
|
||||
|
||||
// remplit le menu
|
||||
foreach (QString filepath, list_) {
|
||||
// creee une nouvelle action pour le fichier
|
||||
QAction *action = new QAction(filepath, 0);
|
||||
menu_ -> addAction(action);
|
||||
|
||||
// lie l'action et le mapper
|
||||
mapper_ -> setMapping(action, filepath);
|
||||
connect(action, SIGNAL(triggered()), mapper_, SLOT(map()));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user