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.
171 lines
3.3 KiB
171 lines
3.3 KiB
#pragma once |
|
|
|
/* |
|
* SPDX-FileCopyrightText: 2003-2007 Craig Drummond <craig@kde.org> |
|
* SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#include "JobRunner.h" |
|
#include "Misc.h" |
|
#include <QDialog> |
|
#include <QThread> |
|
#include <QTreeWidget> |
|
|
|
class QLabel; |
|
class QMenu; |
|
class QAction; |
|
class QDialogButtonBox; |
|
class QAbstractButton; |
|
|
|
namespace KFI |
|
{ |
|
class CActionLabel; |
|
class CFontList; |
|
class CDuplicatesDialog; |
|
|
|
class CFontFileList : public QThread |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
typedef QHash<Misc::TFont, QSet<QString>> 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 m_terminated; |
|
} |
|
|
|
Q_SIGNALS: |
|
|
|
void finished(); |
|
|
|
private: |
|
void run() override; |
|
void fileDuplicates(const QString &folder, const QSet<TFile> &files); |
|
|
|
private: |
|
bool m_terminated; |
|
TFontMap m_map; |
|
}; |
|
|
|
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) |
|
, m_family(fam) |
|
, m_value(val) |
|
{ |
|
} |
|
|
|
const QString &family() const |
|
{ |
|
return m_family; |
|
} |
|
quint32 value() const |
|
{ |
|
return m_value; |
|
} |
|
|
|
private: |
|
QString m_family; |
|
quint32 m_value; |
|
}; |
|
|
|
CFontFileListView(QWidget *parent); |
|
~CFontFileListView() override |
|
{ |
|
} |
|
|
|
QSet<QString> getMarkedFiles(); |
|
CJobRunner::ItemList getMarkedItems(); |
|
void removeFiles(); |
|
|
|
Q_SIGNALS: |
|
|
|
void haveDeletions(bool have); |
|
|
|
private Q_SLOTS: |
|
|
|
void openViewer(); |
|
void properties(); |
|
void mark(); |
|
void unmark(); |
|
void selectionChanged(); |
|
void clicked(QTreeWidgetItem *item, int col); |
|
void contextMenuEvent(QContextMenuEvent *ev) override; |
|
|
|
private: |
|
void checkFiles(); |
|
|
|
private: |
|
QMenu *m_menu; |
|
QAction *m_markAct, *m_unMarkAct; |
|
}; |
|
|
|
class CDuplicatesDialog : public QDialog |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
CDuplicatesDialog(QWidget *parent, CFontList *fl); |
|
|
|
int exec() override; |
|
const CFontList *fontList() const |
|
{ |
|
return m_fontList; |
|
} |
|
|
|
private Q_SLOTS: |
|
|
|
void scanFinished(); |
|
void slotButtonClicked(QAbstractButton *button); |
|
void enableButtonOk(bool); |
|
|
|
private: |
|
QDialogButtonBox *m_buttonBox; |
|
CActionLabel *m_actionLabel; |
|
CFontFileList *m_fontFileList; |
|
QLabel *m_label; |
|
CFontFileListView *m_view; |
|
CFontList *m_fontList; |
|
}; |
|
|
|
}
|
|
|