summaryrefslogtreecommitdiffstats
path: root/kiconedit/kicon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kiconedit/kicon.cpp')
-rw-r--r--kiconedit/kicon.cpp279
1 files changed, 279 insertions, 0 deletions
diff --git a/kiconedit/kicon.cpp b/kiconedit/kicon.cpp
new file mode 100644
index 00000000..92f1bc0b
--- /dev/null
+++ b/kiconedit/kicon.cpp
@@ -0,0 +1,279 @@
+/*
+ KDE Icon Editor - a small graphics drawing program for the KDE
+ Copyright (C) 1998 Thomas Tanghus (tanghus@kde.org)
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <stdlib.h>
+
+#include <qimage.h>
+
+#include <kmessagebox.h>
+#include <kfiledialog.h>
+#include <kio/netaccess.h>
+#include <kimageio.h>
+#include <kdebug.h>
+#include <klocale.h>
+
+#include "kicon.h"
+#include "utils.h"
+
+KIconEditIcon::KIconEditIcon(QObject *parent, const QImage *img, KURL url)
+ : QObject(parent)
+{
+ f = 0;
+ _lastdir = "/";
+ //checkUnNamedBackup(img);
+
+ if(!url.isEmpty())
+ {
+ open(img, url);
+ }
+}
+
+
+KIconEditIcon::~KIconEditIcon()
+{
+}
+
+
+bool KIconEditIcon::open(const QImage *image, KURL url)
+{
+ QImage *img = (QImage*)image;
+
+ if(url.isEmpty())
+ return false;
+
+ kdDebug(4640) << "KIconEditIcon::open " << url.prettyURL() << endl;
+
+ if(!url.isValid()) // try to see if it is a relative filename
+ {
+ kdDebug(4640) << "KIconEditIcon::open (malformed) " << url.prettyURL() << endl;
+
+ QFileInfo fi(url.url());
+ if(fi.isRelative())
+ url = "file:" + fi.absFilePath();
+
+ if(!url.isValid()) // Giving up
+ {
+ QString msg = i18n("The URL: %1 \nseems to be malformed.\n").arg(url.url());
+ KMessageBox::sorry((QWidget*)parent(), msg);
+ return false;
+ }
+ }
+
+ QString filename;
+
+ if(url.isLocalFile())
+ {
+ filename = url.path();
+ }
+ else
+ {
+ if(!KIO::NetAccess::download( url, filename, (QWidget*)parent() ))
+ {
+ QString msg = i18n("There was an error loading:\n%1\n").arg(url.prettyURL());
+ KMessageBox::error((QWidget*)parent(), msg);
+ return false;
+ }
+ }
+
+ bool loadedOk = img->load(filename);
+
+ if(!url.isLocalFile())
+ {
+ KIO::NetAccess::removeTempFile( filename );
+ }
+
+ if(!loadedOk)
+ {
+ QString msg = i18n("There was an error loading:\n%1\n").arg(url.prettyURL());
+ KMessageBox::error((QWidget*)parent(), msg);
+ }
+ else
+ {
+ kdDebug(4640) << "KIconEditIcon::open - Image loaded" << endl;
+
+ // _url is saved off for use in saving the image to the same
+ // file later - should include full path
+ if(url.isLocalFile())
+ {
+ _url = url.path();
+ }
+ else
+ {
+ _url = "";
+ }
+
+ kdDebug(4640) << "KIcon: _url: " << _url << endl;
+
+ // this causes updates of preview, color palettes, etc.
+ emit loaded(img);
+ kdDebug(4640) << "loaded(img)" << endl;
+
+ // this is the name that shows up in status bar -
+ // should be filename with path
+ emit newname(url.prettyURL());
+ kdDebug(4640) << "newname(_url) : " << url.prettyURL() << endl;
+
+ emit addrecent(url.prettyURL());
+
+ kdDebug(4640) << "KIconEditIcon::open - done" << endl;
+ }
+
+ return loadedOk;
+}
+
+
+
+bool KIconEditIcon::promptForFile(const QImage *img)
+{
+ kdDebug(4640) << "KIconEditIcon::promptForFile(const QImage *img)" << endl;
+ /*
+ QString filter = i18n("*|All Files (*)\n"
+ "*.xpm|XPM (*.xpm)\n"
+ "*.png|PNG (*.png)\n"
+ "*.gif|GIF files (*.gif)\n"
+ "*.jpg|JPEG files (*.jpg)\n"
+ "*.ico|Icon files (*.ico)\n");
+
+
+ KURL url = KFileDialog::getOpenURL( QString::null, filter );
+ */
+ bool loaded = false;
+ KURL url = KFileDialog::getImageOpenURL( QString::null, static_cast<QWidget *>(parent()) );
+
+ if( !url.isEmpty() )
+ {
+ loaded = open( img, url );
+ }
+
+ return loaded;
+}
+
+
+
+bool KIconEditIcon::saveAs(const QImage *image)
+{
+ kdDebug(4640) << "KIconEditIcon::saveAs" << endl;
+
+ QString file;
+
+ //Get list of file types..
+ KFileDialog *dialog=new KFileDialog(QString::null, QString::null, static_cast<QWidget *>(parent()), "file dialog", true);
+ dialog->setCaption( i18n("Save Icon As") );
+ dialog->setKeepLocation( true );
+ dialog->setMimeFilter( KImageIO::mimeTypes(KImageIO::Writing), "image/png" );
+ dialog->setOperationMode( KFileDialog::Saving );
+
+ if(dialog->exec()==QDialog::Accepted)
+ {
+ file = dialog->selectedFile();
+ if( file.isNull() )
+ {
+ delete dialog;
+ return false;
+ }
+ if ( !KImageIO::canWrite(KImageIO::type(file)) )
+ {
+ if ( KImageIO::canWrite(KImageIO::typeForMime(dialog->currentFilter())) )
+ file += "."+KImageIO::suffix(KImageIO::typeForMime(dialog->currentFilter()));
+ else
+ file += ".png";
+ }
+ }
+ else
+ {
+ delete dialog;
+ return false;
+ }
+
+ delete dialog;
+
+ if(QFile::exists(file))
+ {
+ int r=KMessageBox::warningContinueCancel(static_cast<QWidget *>(parent()),
+ i18n( "A file named \"%1\" already exists. "
+ "Overwrite it?" ).arg(file),
+ i18n( "Overwrite File?" ),
+ i18n( "&Overwrite" ) );
+
+ if(r==KMessageBox::Cancel)
+ {
+ return false;
+ }
+ }
+
+ return save( image, file );
+}
+
+
+
+bool KIconEditIcon::save(const QImage *image, const QString &_filename)
+{
+ kdDebug(4640) << "KIconEditIcon::save" << endl;
+ QString filename = _filename;
+
+ if(filename.isEmpty())
+ {
+ if(_url.isEmpty())
+ {
+ return saveAs(image);
+ }
+ else
+ {
+ KURL turl(_url);
+ filename = turl.path();
+ }
+ }
+
+ QImage *img = (QImage*)image;
+ img->setAlphaBuffer(true);
+
+ KURL turl(filename);
+ QString str = turl.path();
+ bool savedOk = false;
+
+ /* base image type on file extension - let kimageio
+ take care of this determination */
+
+ if(img->save(str, KImageIO::type(str).ascii()))
+ {
+ kdDebug(4640) << "img->save()) successful" << endl;
+ emit saved();
+ _url = filename;
+
+ // emit signal to change title bar to reflect new name
+ emit newname(filename);
+ kdDebug(4640) << "newname(filenamme) : " << _url << endl;
+ savedOk = true;
+ emit addrecent(filename);
+ }
+ else
+ {
+ QString msg = i18n("There was an error saving:\n%1\n").arg(str);
+ KMessageBox::error((QWidget*)parent(), msg);
+ kdDebug(4640) << "KIconEditIcon::save - " << msg << endl;
+ }
+
+ kdDebug(4640) << "KIconEditIcon::save - done" << endl;
+
+ return savedOk;
+}
+
+
+#include "kicon.moc"