Pencil2D  ff90c0872e88be3bf81c548cd60f01983012ec49
Pencil2D is an animation software for both bitmap and vector graphics. It is free, multi-platform, and open source.
 All Classes Functions
filedialogex.cpp
1 /*
2 
3 Pencil - Traditional Animation Software
4 Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
5 Copyright (C) 2013-2017 Matt Chiawen Chang
6 
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; version 2 of the License.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15 
16 */
17 
18 #include "filedialogex.h"
19 
20 #include <QSettings>
21 #include <QFileInfo>
22 #include <QFileDialog>
23 
24 #include "fileformat.h"
25 #include "pencildef.h"
26 
27 FileDialog::FileDialog( QWidget* parent ) : QObject( parent )
28 {
29  mRoot = parent;
30 }
31 
32 FileDialog::~FileDialog()
33 {
34 }
35 
36 QString FileDialog::openFile(FileType fileType)
37 {
38  QString strTitle = openDialogTitle( fileType );
39  QString strInitialFilePath = getLastOpenPath( fileType );
40  QString strFilter = openFileFilters( fileType );
41 
42  QString filePath = QFileDialog::getOpenFileName( mRoot,
43  strTitle,
44  strInitialFilePath,
45  strFilter );
46  if ( !filePath.isEmpty() )
47  {
48  setLastOpenPath( fileType, filePath );
49  }
50 
51  return filePath;
52 }
53 
54 QStringList FileDialog::openFiles(FileType fileType)
55 {
56  QString strTitle = openDialogTitle( fileType );
57  QString strInitialFilePath = getLastOpenPath( fileType );
58  QString strFilter = openFileFilters( fileType );
59 
60  QStringList filePaths = QFileDialog::getOpenFileNames( mRoot,
61  strTitle,
62  strInitialFilePath,
63  strFilter );
64  if ( !filePaths.isEmpty() && !filePaths.first().isEmpty() )
65  {
66  setLastOpenPath( fileType, filePaths.first() );
67  }
68 
69  return filePaths;
70 }
71 
72 QString FileDialog::saveFile( FileType fileType )
73 {
74  QString strTitle = saveDialogTitle( fileType );
75  QString strInitialFilePath = getLastSavePath( fileType );
76  QString strFilter = saveFileFilters( fileType );
77 
78  QString filePath = QFileDialog::getSaveFileName( mRoot,
79  strTitle,
80  strInitialFilePath,
81  strFilter );
82  if ( !filePath.isEmpty() )
83  {
84  setLastSavePath( fileType, filePath );
85  }
86 
87  return filePath;
88 }
89 
90 QString FileDialog::getLastOpenPath( FileType fileType )
91 {
92  QSettings setting( PENCIL2D, PENCIL2D );
93  setting.beginGroup( "LastOpenPath" );
94 
95  return setting.value( toSettingKey( fileType ), QDir::homePath() ).toString();
96 }
97 
98 void FileDialog::setLastOpenPath( FileType fileType, QString openPath )
99 {
100  QSettings setting( PENCIL2D, PENCIL2D );
101  setting.beginGroup( "LastOpenPath" );
102 
103  setting.setValue( toSettingKey( fileType ), QFileInfo( openPath ).absolutePath() );
104 }
105 
106 QString FileDialog::getLastSavePath( FileType fileType )
107 {
108  QSettings setting( PENCIL2D, PENCIL2D );
109  setting.beginGroup( "LastSavePath" );
110 
111  return setting.value( toSettingKey( fileType ),
112  QDir::homePath() + "/" + defaultFileName( fileType) ).toString();
113 }
114 
115 void FileDialog::setLastSavePath( FileType fileType, QString savePath )
116 {
117  QSettings setting( PENCIL2D, PENCIL2D );
118  setting.beginGroup( "LastSavePath" );
119 
120  setting.setValue( toSettingKey( fileType ), savePath );
121 }
122 
123 QString FileDialog::openDialogTitle( FileType fileType )
124 {
125  switch ( fileType )
126  {
127  case FileType::ANIMATION: return tr( "Open animation" );
128  case FileType::IMAGE: return tr( "Import image" );
129  case FileType::IMAGE_SEQUENCE: return tr( "Import image sequence" );
130  case FileType::MOVIE: return tr( "Import movie" );
131  case FileType::SOUND: return tr( "Import sound" );
132  case FileType::PALETTE: return tr( "Import palette" );
133  default: Q_ASSERT( false );
134  }
135  return "";
136 }
137 
138 QString FileDialog::saveDialogTitle( FileType fileType )
139 {
140  switch ( fileType )
141  {
142  case FileType::ANIMATION: return tr( "Save animation" );
143  case FileType::IMAGE: return tr( "Export image" );
144  case FileType::IMAGE_SEQUENCE: return tr( "Export image sequence" );
145  case FileType::MOVIE: return tr( "Export movie" );
146  case FileType::SOUND: return tr( "Export sound" );
147  case FileType::PALETTE: return tr( "Export palette" );
148  default: Q_ASSERT( false );
149  }
150  return "";
151 }
152 
153 QString FileDialog::openFileFilters( FileType fileType )
154 {
155  switch ( fileType )
156  {
157  case FileType::ANIMATION: return PFF_OPEN_ALL_FILE_FILTER;
158  case FileType::IMAGE: return PENCIL_IMAGE_FILTER;
159  case FileType::IMAGE_SEQUENCE: return PENCIL_IMAGE_FILTER;
160  case FileType::MOVIE: return PENCIL_MOVIE_EXT;
161  case FileType::SOUND: return tr( "Sounds (*.wav *.mp3);;WAV (*.wav);;MP3 (*.mp3)" );
162  case FileType::PALETTE: return tr( "Palette (*.xml)" );
163  default: Q_ASSERT( false );
164  }
165  return "";
166 }
167 
168 QString FileDialog::saveFileFilters( FileType fileType )
169 {
170  switch ( fileType )
171  {
172  case FileType::ANIMATION: return PFF_SAVE_ALL_FILE_FILTER;
173  case FileType::IMAGE: return QString();
174  case FileType::IMAGE_SEQUENCE: return QString();
175  case FileType::MOVIE: return tr( "MP4 (*.mp4);;AVI (*.avi);;GIF (*.gif)" );
176  case FileType::SOUND: return QString();
177  case FileType::PALETTE: return tr( "Palette (*.xml)" );
178  default: Q_ASSERT( false );
179  }
180  return "";
181 }
182 
183 QString FileDialog::defaultFileName( FileType fileType )
184 {
185 
186  switch ( fileType )
187  {
188  case FileType::ANIMATION: return tr( "MyAnimation.pclx" );
189  case FileType::IMAGE: return "untitled.png";
190  case FileType::IMAGE_SEQUENCE: return "untitled.png";
191  case FileType::MOVIE: return "untitled.mp4";
192  case FileType::SOUND: return "untitled.wav";
193  case FileType::PALETTE: return "untitled.xml";
194  default: Q_ASSERT( false );
195  }
196  return "";
197 }
198 
199 QString FileDialog::toSettingKey( FileType fileType )
200 {
201  switch ( fileType )
202  {
203  case FileType::ANIMATION: return "Animation";
204  case FileType::IMAGE: return "Image";
205  case FileType::IMAGE_SEQUENCE: return "ImageSequence";
206  case FileType::MOVIE: return "Movie";
207  case FileType::SOUND: return "Sound";
208  case FileType::PALETTE: return "Palette";
209  default: Q_ASSERT( false );
210  }
211  return "";
212 }