You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegraphics/kiconedit/kiconeditslots.cpp

544 lines
12 KiB

/*
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 <tqpaintdevicemetrics.h>
#include <tqpainter.h>
#include <kkeydialog.h>
#include <klocale.h>
#include <kmessagebox.h>
#include <kdebug.h>
#include <kprinter.h>
#include <kurldrag.h>
#include "kiconedit.h"
#include "kiconcolors.h"
#include "palettetoolbar.h"
#ifndef PICS_INCLUDED
#define PICS_INCLUDED
#include "pics/logo.xpm"
#endif
void KIconEdit::updateProperties()
{
KIconEditProperties *props = KIconEditProperties::self();
gridview->setShowRulers(props->showRulers());
if(props->bgMode() == TQWidget::FixedPixmap)
{
TQPixmap pix(props->bgPixmap());
if(pix.isNull())
{
TQPixmap pmlogo((const char**)logo);
pix = pmlogo;
}
gridview->viewPortWidget()->viewport()->setBackgroundPixmap(pix);
m_paletteToolBar->setPreviewBackground(pix);
}
else
{
gridview->viewPortWidget()->viewport()
->setBackgroundColor(props->bgColor());
m_paletteToolBar->setPreviewBackground(props->bgColor());
}
grid->setTransparencyDisplayType(props->transparencyDisplayType());
grid->setTransparencySolidColor(props->transparencySolidColor());
grid->setCheckerboardColor1(props->checkerboardColor1());
grid->setCheckerboardColor2(props->checkerboardColor2());
grid->setCheckerboardSize(props->checkerboardSize());
grid->update();
}
void KIconEdit::slotNewWin(const TQString & url)
{
//kdDebug(4640) << "KIconEdit::openNewWin() - " << url << endl;
KIconEdit *w = new KIconEdit(KURL(url), "kiconedit");
Q_CHECK_PTR(w);
}
void KIconEdit::slotNew()
{
bool cancel = false;
if (grid->isModified())
{
int r = KMessageBox::warningYesNoCancel(this,
i18n("The current file has been modified.\nDo you want to save it?"), TQString(), KStdGuiItem::save(), KStdGuiItem::discard());
switch(r)
{
case KMessageBox::Yes:
if(!icon->save(&grid->image()))
{
cancel = true;
}
break;
case KMessageBox::No:
break;
case KMessageBox::Cancel:
cancel = true;
break;
default:
break;
}
}
if(!cancel)
{
KNewIcon newicon(this);
if(newicon.exec())
{
int r = newicon.openStyle();
if(r == KNewIcon::Blank)
{
grid->editClear();
const TQSize s = newicon.templateSize();
//kdDebug(4640) << "Size: " << s.width() << " x " << s.height() << endl;
grid->setSize(s);
grid->setModified(false);
}
else if(r == KNewIcon::Template)
{
TQString str = newicon.templatePath();
icon->open(&grid->image(), KURL( str ));
}
icon->setUrl("");
emit newname(i18n("Untitled"));
}
}
}
void KIconEdit::slotOpen()
{
bool cancel = false;
if( grid->isModified() )
{
int r = KMessageBox::warningYesNoCancel(this,
i18n("The current file has been modified.\nDo you want to save it?"),TQString(), KStdGuiItem::save(), KStdGuiItem::discard());
switch( r )
{
case KMessageBox::Yes:
if(!icon->save( &grid->image() ))
{
cancel = true;
}
break;
case KMessageBox::No:
break;
case KMessageBox::Cancel:
cancel = true;
break;
default:
break;
}
}
if( !cancel )
{
if (icon->promptForFile( &grid->image() ))
{
grid->setModified(false);
}
}
}
/*
close only the current window
*/
void KIconEdit::slotClose()
{
//kdDebug(4640) << "KIconEdit: Closing " << endl;
close();
}
void KIconEdit::slotSave()
{
//kdDebug(4640) << "KIconEdit: slotSave() " << endl;
icon->save(&grid->image());
}
void KIconEdit::slotSaveAs()
{
//kdDebug(4640) << "KIconEdit: slotSaveAs() " << endl;
icon->saveAs(&grid->image());
}
void KIconEdit::slotPrint()
{
KPrinter printer;
if ( printer.setup(this, i18n("Print %1").arg(icon->url().section('/', -1))) )
{
int margin = 10, yPos = 0;
printer.setCreator("KDE Icon Editor");
TQPainter p;
p.begin( &printer );
TQFontMetrics fm = p.fontMetrics();
// need width/height
TQPaintDeviceMetrics metrics( &printer );
p.drawText( margin, margin + yPos, metrics.width(), fm.lineSpacing(),
ExpandTabs | DontClip, icon->url() );
yPos = yPos + fm.lineSpacing();
p.drawPixmap( margin, margin + yPos, grid->pixmap() );
p.end();
}
}
void KIconEdit::slotZoomIn()
{
grid->zoom(DirIn);
}
void KIconEdit::slotZoomOut()
{
grid->zoom(DirOut);
}
void KIconEdit::slotZoom1()
{
grid->zoomTo(1);
}
void KIconEdit::slotZoom2()
{
grid->zoomTo(2);
}
void KIconEdit::slotZoom5()
{
grid->zoomTo(5);
}
void KIconEdit::slotZoom10()
{
grid->zoomTo(10);
}
void KIconEdit::slotCopy()
{
grid->editCopy();
}
void KIconEdit::slotCut()
{
grid->editCopy(true);
}
void KIconEdit::slotPaste()
{
static_cast<KRadioAction*>(actionCollection()
->action("tool_find_pixel"))->setChecked(true);
grid->setTool(KIconEditGrid::Find);
grid->editPaste();
}
void KIconEdit::slotClear()
{
grid->editClear();
}
void KIconEdit::slotSelectAll()
{
grid->setTool(KIconEditGrid::SelectRect);
grid->editSelectAll();
}
void KIconEdit::slotOpenRecent(const KURL& iconFile)
{
bool cancel = false;
if( grid->isModified() )
{
int r = KMessageBox::warningYesNoCancel(this,
i18n("The current file has been modified.\nDo you want to save it?"),TQString(), KStdGuiItem::save(), KStdGuiItem::discard());
switch( r )
{
case KMessageBox::Yes:
if (!icon->save( &grid->image() ))
{
cancel = true;
}
break;
case KMessageBox::No:
break;
case KMessageBox::Cancel:
cancel = true;
break;
default:
break;
}
}
if( !cancel )
{
if(icon->open(&grid->image(), iconFile))
{
grid->setModified(false);
}
}
}
void KIconEdit::slotConfigureSettings()
{
KIconConfig* c = new KIconConfig(this);
c->exec();
delete c;
}
void KIconEdit::slotConfigureKeys()
{
KKeyDialog::configure(actionCollection());
KIconEdit *ki = 0L;
for (ki = windowList.first(); ki; ki = windowList.next())
{
if (ki != this)
{
ki->updateAccels();
}
}
}
void KIconEdit::slotShowGrid()
{
bool b = KIconEditProperties::self()->showGrid();
grid->setGrid( !b );
KIconEditProperties::self()->setShowGrid( !b );
}
void KIconEdit::slotToolPointer()
{
grid->setTool(KIconEditGrid::Find);
}
void KIconEdit::slotToolFreehand()
{
grid->setTool(KIconEditGrid::Freehand);
}
void KIconEdit::slotToolRectangle()
{
grid->setTool(KIconEditGrid::Rect);
}
void KIconEdit::slotToolFilledRectangle()
{
grid->setTool(KIconEditGrid::FilledRect);
}
void KIconEdit::slotToolCircle()
{
grid->setTool(KIconEditGrid::Circle);
}
void KIconEdit::slotToolFilledCircle()
{
grid->setTool(KIconEditGrid::FilledCircle);
}
void KIconEdit::slotToolEllipse()
{
grid->setTool(KIconEditGrid::Ellipse);
}
void KIconEdit::slotToolFilledEllipse()
{
grid->setTool(KIconEditGrid::FilledEllipse);
}
void KIconEdit::slotToolSpray()
{
grid->setTool(KIconEditGrid::Spray);
}
void KIconEdit::slotToolFlood()
{
grid->setTool(KIconEditGrid::FloodFill);
}
void KIconEdit::slotToolLine()
{
grid->setTool(KIconEditGrid::Line);
}
void KIconEdit::slotToolEraser()
{
grid->setTool(KIconEditGrid::Eraser);
}
void KIconEdit::slotToolSelectRect()
{
grid->setTool(KIconEditGrid::SelectRect);
}
void KIconEdit::slotToolSelectCircle()
{
grid->setTool(KIconEditGrid::SelectCircle);
}
void KIconEdit::slotSaved()
{
grid->setModified(false);
}
void KIconEdit::slotUpdateZoom( int s )
{
m_actZoomOut->setEnabled( s>1 );
}
void KIconEdit::slotUpdateStatusPos(int x, int y)
{
TQString str = i18n("Status Position", "%1, %2").arg(x).arg(y);
statusbar->changeItem( str, 0);
}
void KIconEdit::slotUpdateStatusSize(int x, int y)
{
TQString str = i18n("Status Size", "%1 x %2").arg(x).arg(y);
statusbar->changeItem( str, 1);
}
void KIconEdit::slotUpdateStatusScaling(int s)
{
KIconEditProperties::self()->setGridScale( s );
TQString str;
str.sprintf("1:%d", s);
statusbar->changeItem( str, 2);
}
void KIconEdit::slotUpdateStatusColors(uint)
{
TQString str = i18n("Colors: %1").arg(grid->numColors());
statusbar->changeItem( str, 3);
}
void KIconEdit::slotUpdateStatusColors(uint n, uint *)
{
TQString str = i18n("Colors: %1").arg(n);
statusbar->changeItem( str, 3);
}
void KIconEdit::slotUpdateStatusMessage(const TQString & msg)
{
statusbar->changeItem( msg, 4);
}
void KIconEdit::slotUpdateStatusName(const TQString & name)
{
m_name = name;
TQString text = m_name;
if(grid->isModified())
{
text += " ["+i18n("modified")+"]";
}
setCaption(text);
}
void KIconEdit::slotUpdateStatusModified(bool)
{
slotUpdateStatusName(m_name);
}
void KIconEdit::slotUpdatePaste(bool state)
{
m_actPaste->setEnabled(state);
m_actPasteNew->setEnabled(state);
}
void KIconEdit::slotUpdateCopy(bool state)
{
m_actCopy->setEnabled(state);
m_actCut->setEnabled(state);
}
void KIconEdit::slotOpenBlank(const TQSize s)
{
grid->loadBlank( s.width(), s.height());
}
void KIconEdit::dragEnterEvent(TQDragEnterEvent* e)
{
e->accept(KURLDrag::canDecode(e));
}
/*
accept drop of a file - opens file in current window
old code to drop image, as image, should be removed
*/
void KIconEdit::dropEvent( TQDropEvent *e )
{
//kdDebug(4640) << "Got TQDropEvent!" << endl;
KURL::List fileList;
bool loadedinthis = false;
if(KURLDrag::decode(e, fileList))
{
for(KURL::List::ConstIterator it = fileList.begin();
it != fileList.end(); ++it)
{
//kdDebug(4640) << "In dropEvent for " << (*it).prettyURL() << endl;
const KURL &url = *it;
if(url.isValid())
{
if (!grid->isModified() && !loadedinthis)
{
icon->open(&grid->image(), url);
loadedinthis = true;
}
else
{
slotNewWin(url.url());
}
}
}
}
}