#ifndef __DUPLICATES_DIALOG_H__ #define __DUPLICATES_DIALOG_H__ /* * KFontInst - KDE Font Installer * * Copyright 2003-2007 Craig Drummond * * ---- * * 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 General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include #include #include #include #include "Misc.h" #include "JobRunner.h" #include #include #include namespace KFI { class CActionLabel; class CFontList; class CDuplicatesDialog; class CFontFileList : public QThread { Q_OBJECT public: typedef QHash > TFontMap; // // TFile store link from filename to FontMap item. // This is used when looking for duplicate filenames (a.ttf/a.TTF). struct TFile { TFile(const QString &n, CFontFileList::TFontMap::Iterator i) : name(n), it(i), useLower(false) { } TFile(const QString &n, bool l=false) : name(n), useLower(l) { } bool operator==(const TFile &f) const { return useLower||f.useLower ? name.toLower()==f.name.toLower() : name==f.name; } QString name; CFontFileList::TFontMap::Iterator it; bool useLower; }; public: CFontFileList(CDuplicatesDialog *parent); void start(); void terminate(); void getDuplicateFonts(TFontMap &map); bool wasTerminated() const { return itsTerminated; } Q_SIGNALS: void finished(); private: void run(); void fileDuplicates(const QString &folder, const QSet &files); private: bool itsTerminated; TFontMap itsMap; }; class CFontFileListView : public QTreeWidget { Q_OBJECT public: class StyleItem : public QTreeWidgetItem { public: StyleItem(CFontFileListView *parent, const QStringList &details, const QString &fam, quint32 val) : QTreeWidgetItem(parent, details) , itsFamily(fam) , itsValue(val) { } const QString & family() const { return itsFamily; } quint32 value() const { return itsValue; } private: QString itsFamily; quint32 itsValue; }; CFontFileListView(QWidget *parent); virtual ~CFontFileListView() { } QSet getMarkedFiles(); CJobRunner::ItemList getMarkedItems(); void removeFiles(); Q_SIGNALS: void haveDeletions(bool have); private Q_SLOTS: void openViewer(); void properties(); void mark(); void unmark(); void selectedChanged(); void clicked(QTreeWidgetItem *item, int col); void contextMenuEvent(QContextMenuEvent *ev); private: void checkFiles(); private: QMenu *itsMenu; QAction *itsMarkAct, *itsUnMarkAct; }; class CDuplicatesDialog : public KDialog { Q_OBJECT public: CDuplicatesDialog(QWidget *parent, CFontList *fl); int exec(); const CFontList * fontList() const { return itsFontList; } private Q_SLOTS: void scanFinished(); void slotButtonClicked(int button); private: CActionLabel *itsActionLabel; CFontFileList *itsFontFileList; QLabel *itsLabel; CFontFileListView *itsView; CFontList *itsFontList; }; } #endif