23 #include "recentfilemenu.h"
25 RecentFileMenu::RecentFileMenu( QString title, QWidget *parent ) :
26 QMenu( title, parent )
28 mClearSeparator =
new QAction(
this );
29 mClearSeparator->setSeparator(
true );
31 mClearAction =
new QAction( tr(
"Clear"),
this );
34 RecentFileMenu::~RecentFileMenu()
36 delete mClearSeparator;
40 void RecentFileMenu::clear()
42 for( QString filename : mRecentFiles )
44 removeRecentFile( filename );
46 removeAction( mClearSeparator );
47 removeAction( mClearAction );
49 mRecentActions.clear();
52 void RecentFileMenu::setRecentFiles( QStringList filenames )
55 for( QString filename : filenames )
57 if ( filename !=
"" ) {
58 addRecentFile( filename );
63 bool RecentFileMenu::loadFromDisk()
65 QSettings settings( PENCIL2D, PENCIL2D );
66 QVariant recent = settings.value(
"RecentFiles" );
67 if ( recent.isNull() )
72 setRecentFiles( recentFileList );
76 bool RecentFileMenu::saveToDisk()
78 QSettings settings( PENCIL2D, PENCIL2D );
79 settings.setValue(
"RecentFiles", QVariant( mRecentFiles ) );
83 void RecentFileMenu::addRecentFile( QString filename )
85 if ( mRecentFiles.contains( filename ) )
87 removeRecentFile( filename );
90 while ( mRecentFiles.size() >= MAX_RECENT_FILES )
92 removeRecentFile( mRecentFiles.last() );
95 mRecentFiles.prepend( filename );
97 QAction* action =
new QAction( filename,
this );
98 action->setData( QVariant( filename ) );
100 QObject::connect( action, SIGNAL( triggered() ),
this, SLOT( onRecentFileTriggered() ) );
102 mRecentActions.emplace( filename, action );
103 if ( mRecentFiles.size() == 1 )
106 addAction( mClearSeparator );
107 addAction( mClearAction );
108 QObject::connect( mClearAction, &QAction::triggered,
this, &RecentFileMenu::clear );
112 QString firstFile = mRecentFiles[ 1 ];
113 qDebug() <<
"Recent file" << firstFile;
114 insertAction( mRecentActions[ firstFile ], action );
118 void RecentFileMenu::removeRecentFile( QString filename )
120 if ( mRecentFiles.contains( filename ) )
122 QAction *action = mRecentActions.at( filename );
123 removeAction( action );
125 mRecentActions.erase( filename );
126 mRecentFiles.removeOne( filename );
131 void RecentFileMenu::onRecentFileTriggered()
133 QAction* action = ( QAction* )QObject::sender();
134 QString filePath = action->data().toString();
136 if ( !filePath.isEmpty() )
138 emit loadRecentFile( filePath );