Mit diesem Kapitel endet unsere Einführung. Wir werden die Dateidialoge von KScribble dazu
bringen, Dateifilter zu verwenden. Zu diesem Zweck bietet KImageIO Methoden, uns die Bezeichnungen aller
Bilddateiformate zu holen, die man öffnen und speichern kann. Die folgende Implementierung ersetzt
den Standardfilter (der eigentlich gar keiner ist - Sie müssen den Dateifilter Ihrer Anwendung den
nötigen Mimetypen anpassen), indem sie die pattern() Methode von KimageIO
verwendet:
1 void KScribbleApp::slotFileOpen()
2 {
3 slotStatusMsg(i18n("Opening file..."));
4
5 -> QString fileToOpen=KFileDialog::getOpenFileName(QDir::currentDirPath(),
6 -> KImageIO::pattern(KImageIO::Reading), this, i18n("Open File..."));
7 if(!fileToOpen.isEmpty())
8 {
9 openDocumentFile(fileToOpen);
10 }
11
12 slotStatusMsg(i18n("Ready."));
13 } |
Wir setzen hier den Modus in pattern() auf Lesen - was sich von dem zum Schreiben benutzten
Patterns unterscheided. Jetzt haben wir das Öffnen der Datei mit Dateinamen und Format
erledigt. Was noch zur Vervollständigung der Struktur fehlt, ist das Setzen der Patterns auch zum
Schreiben. Dazu wird der Slot slotFileSaveAs() aufgerufen, der dann seinerseits den
Dateidialog aufruft, in dem dann der Dateiname abgefragt wird. Dort werden wir den Patternmodus zum
Schreiben setzen:
1 void KScribbleApp::slotFileSaveAs()
2 {
3 slotStatusMsg(i18n("Saving file with a new filename..."));
4
5 -> QString newName=KFileDialog::getSaveFileName(QDir::currentDirPath(),
6 -> KImageIO::pattern(KImageIO::Writing), this, i18n("Save as..."));
7 if(!newName.isEmpty())
8 {
9 KScribbleView* m = (KScribbleView*)pWorkspace->activeWindow();
10 if( m )
11 {
12 KScribbleDoc* doc = m->getDocument();
13 QString format=QFileInfo(newName).extension();
14 format=format.upper();
15 if(!doc->saveDocument(newName,format))
16 {
17 KMessageBox::error (this,i18n("Could not save the current document !"), i18n("I/O Error !"));
18 return;
19 }
20 doc->changedViewList();
21 setWndTitle(m);
22 }
23 }
24 slotStatusMsg(i18n("Ready."));
25 } |