diff options
Diffstat (limited to 'kcoloredit/kcoloreditdoc.cpp')
-rw-r--r-- | kcoloredit/kcoloreditdoc.cpp | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/kcoloredit/kcoloreditdoc.cpp b/kcoloredit/kcoloreditdoc.cpp new file mode 100644 index 00000000..536300a5 --- /dev/null +++ b/kcoloredit/kcoloreditdoc.cpp @@ -0,0 +1,293 @@ +/*************************************************************************** + kcoloreditdoc.cpp - description + ------------------- + begin : Sat Jul 8 09:57:28 CEST 2000 + copyright : (C) 2000 by Artur Rataj + email : art@zeus.polsl.gliwice.pl + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +// include files for Qt +#include <qdir.h> +#include <qfileinfo.h> +#include <qwidget.h> +#include <qclipboard.h> + +// include files for KDE +#include <klocale.h> +#include <kmessagebox.h> + +// application specific includes +#include "kcoloreditdoc.h" +#include "kcoloredit.h" +#include "kcoloreditview.h" +#include "resource.h" + +KColorEditDoc::KColorEditDoc(QWidget *parent, const char *name) : QObject(parent, name), + m_palette(), m_paletteHistory(&m_palette, 0) { + m_pViewList = new QPtrList<KColorEditView>(); + m_pViewList->setAutoDelete(true); +} + +KColorEditDoc::~KColorEditDoc() +{ +} + +void KColorEditDoc::addView(KColorEditView *view) +{ + m_pViewList->append(view); +} + +void KColorEditDoc::removeView(KColorEditView *view) +{ + m_pViewList->remove(view); +} + +void KColorEditDoc::setModified(bool b) { + m_modified = b; + + emit modified( b ); +} + +void KColorEditDoc::setAbsFilePath(const QString &filename) +{ + m_absFilePath=filename; +} + +const QString &KColorEditDoc::absFilePath() const +{ + return m_absFilePath; +} + +void KColorEditDoc::setTitle(const QString &_t) +{ + m_title=_t; +} + +const QString &KColorEditDoc::title() const +{ + return m_title; +} + +void KColorEditDoc::slotRedrawAllViews(KColorEditView *sender, bool newDocument) { + KColorEditView *w; + if(m_pViewList) + { + for(w=m_pViewList->first(); w!=0; w=m_pViewList->next()) + { + if(w!=sender) + w->redraw(newDocument); + } + } +} + +void KColorEditDoc::slotChangeViewMode(bool viewColorNames) { + KColorEditView *w; + if(m_pViewList) + { + for(w=m_pViewList->first(); w!=0; w=m_pViewList->next()) + { + w->slotViewColorNames(viewColorNames); + } + } +} + +bool KColorEditDoc::saveModified() +{ + bool completed=true; + + if(m_modified) + { + KColorEditApp *window=(KColorEditApp *) parent(); + int want_save = KMessageBox::warningYesNoCancel(window, + i18n("The current file has been modified.\n" + "Do you want to save it?"), QString::null, KStdGuiItem::save(), i18n("Do Not Save")); + switch(want_save) + { + case KMessageBox::Yes: + if (title() == i18n("Untitled")) + { + completed = window->slotFileSaveAs(); + } + else + { + completed = saveDocument(absFilePath()); + }; + if(!completed) + KMessageBox::sorry(0, errorString()); + break; + + case KMessageBox::No: + completed=true; + break; + + case KMessageBox::Cancel: + completed=false; + break; + + default: + completed=false; + break; + } + } + + return completed; +} + +void KColorEditDoc::closeDocument() +{ + deleteContents(); +} + +bool KColorEditDoc::newDocument() +{ + deleteContents(); + setModified(false); + setAbsFilePath( QDir::homeDirPath() ); + setTitle( i18n("Untitled") ); + setPaletteCursorPos(0); + setPaletteSelection(0, 0); + slotRedrawAllViews(0, true); + return true; +} + +bool KColorEditDoc::openDocument(const QString& filename) { + if(filename.isEmpty()) + return newDocument(); + else { + deleteContents(); + QFileInfo fileInfo(filename); + setAbsFilePath( fileInfo.absFilePath() ); + if(!m_palette.load( absFilePath() )) { + setErrorString(m_palette.errorString()); + return false; + } + setModified(false); + setTitle( fileInfo.fileName() ); + setPaletteCursorPos(m_palette.length()); + setPaletteSelection(0, 0); + slotRedrawAllViews(0, true); + KColorEditApp *window=(KColorEditApp*)parent(); + window->setCaption(m_title); + } + return true; +} + +bool KColorEditDoc::saveDocument(const QString& filename) { + if(!m_palette.save( filename )) { + setErrorString(m_palette.errorString()); + return false; + } + setModified(false); + return true; +} + +void KColorEditDoc::deleteContents() { + m_palette.deleteContents(); +} + +void KColorEditDoc::setErrorString(const QString& string) { + m_errorString = string; +} + +const QString& KColorEditDoc::errorString() const { + return m_errorString; +} + +PaletteHistory* KColorEditDoc::paletteHistory() { + return &m_paletteHistory; +} + +void KColorEditDoc::setPaletteCursorPos(const int pos) { + m_paletteCursorPos = pos; + + emit paletteAvailable( pos < m_palette.length() ); +} + +int KColorEditDoc::paletteCursorPos() { + return m_paletteCursorPos; +} + +void KColorEditDoc::setPaletteSelection(const int begin, const int end) { + m_paletteSelectionBegin = begin; + m_paletteSelectionEnd = end; + + emit selectionChanged( begin, end ); +} + +int KColorEditDoc::paletteSelectionBegin() const { + return m_paletteSelectionBegin; +} + +int KColorEditDoc::paletteSelectionEnd() const { + return m_paletteSelectionEnd; +} + +void KColorEditDoc::copyToClipboard(Palette& palette) { + QString text; + QTextOStream stream(&text); + palette.save(stream, 0, false); + KApplication::clipboard()->setText(text); + + emit clipboardChanged(); +} + +void KColorEditDoc::copy() { + Palette paletteCopy = m_palette.copy(paletteSelectionBegin(), + paletteSelectionEnd() - paletteSelectionBegin()); + copyToClipboard(paletteCopy); +} + +void KColorEditDoc::cut() { + Palette paletteCut = m_paletteHistory.cut(paletteSelectionBegin(), + paletteSelectionEnd() - paletteSelectionBegin()); + copyToClipboard(paletteCut); + setPaletteCursorPos(paletteSelectionBegin()); + setPaletteSelection(0, 0); + setModified(true); + slotRedrawAllViews(0); +} + +void KColorEditDoc::paste() { + Palette palettePaste; + QString text; + QTextIStream stream(&text); + text = KApplication::clipboard()->text(); + if(palettePaste.load( stream, false )) { + m_paletteHistory.paste(paletteCursorPos(), palettePaste); + setPaletteSelection(paletteCursorPos(), paletteCursorPos() + + palettePaste.length()); + setModified(true); + slotRedrawAllViews(0); + } +} + +void KColorEditDoc::insert(int index, const Color& color) { + Palette paletteInsert; + Color* insertColor = new Color(color); + paletteInsert.append(insertColor); + m_paletteHistory.paste(index, paletteInsert); + setPaletteCursorPos( index ); + setPaletteSelection(0, 0); + setModified(true); + slotRedrawAllViews(0); +} + +void KColorEditDoc::replace(int index, const Color& color) { + Palette paletteReplace; + Color* replaceColor = new Color(color); + paletteReplace.append(replaceColor); + m_paletteHistory.replace(index, paletteReplace); + setPaletteSelection(0, 0); + setModified(true); + slotRedrawAllViews(0); +} +#include "kcoloreditdoc.moc" |