Advance Wayland and KDE package bring-up
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
/*
|
||||
This file is part of the KDE libraries
|
||||
SPDX-FileCopyrightText: 2005 Joseph Wenninger <jowenn@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#ifndef KCHARSELECT_P_H
|
||||
#define KCHARSELECT_P_H
|
||||
|
||||
#include <QAbstractTableModel>
|
||||
#include <QFont>
|
||||
#include <QMimeData>
|
||||
#include <QTableView>
|
||||
#include <memory>
|
||||
|
||||
#include "kcharselectdata_p.h"
|
||||
|
||||
class KCharSelectTablePrivate;
|
||||
|
||||
/**
|
||||
* @short Character selection table
|
||||
*
|
||||
* A table widget which displays the characters of a font. Internally
|
||||
* used by KCharSelect. See the KCharSelect documentation for further
|
||||
* details.
|
||||
*
|
||||
* @author Reginald Stadlbauer <reggie@kde.org>
|
||||
* @author Daniel Laidig <d.laidig@gmx.de>
|
||||
*/
|
||||
|
||||
class KCharSelectTable : public QTableView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
/**
|
||||
* Constructor. Using @p _font, draw a table of chars.
|
||||
* @sa setContents
|
||||
*/
|
||||
KCharSelectTable(QWidget *parent, const QFont &_font);
|
||||
|
||||
~KCharSelectTable() override;
|
||||
|
||||
void resizeEvent(QResizeEvent *) override;
|
||||
|
||||
/** Set the font to be displayed to @p _font . */
|
||||
void setFont(const QFont &_font);
|
||||
|
||||
/** Set the highlighted character to @p c . */
|
||||
void setChar(uint c);
|
||||
/** Set the contents of the table to @p chars . */
|
||||
void setContents(const QList<uint> &chars);
|
||||
|
||||
/** @return Currently highlighted character. */
|
||||
uint chr();
|
||||
|
||||
/**
|
||||
* Returns the currently displayed font.
|
||||
*/
|
||||
QFont font() const;
|
||||
|
||||
/**
|
||||
* Returns a list of currently displayed characters.
|
||||
*/
|
||||
QList<uint> displayedChars() const;
|
||||
|
||||
/**
|
||||
* Reimplemented.
|
||||
*/
|
||||
void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) override;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Reimplemented.
|
||||
*/
|
||||
void keyPressEvent(QKeyEvent *e) override;
|
||||
|
||||
Q_SIGNALS:
|
||||
/** Emitted to indicate that character @p c is activated (such as by double-clicking it). */
|
||||
void activated(uint c);
|
||||
void focusItemChanged(uint c);
|
||||
void showCharRequested(uint c);
|
||||
|
||||
private:
|
||||
friend class KCharSelectTablePrivate;
|
||||
std::unique_ptr<KCharSelectTablePrivate> const d;
|
||||
|
||||
Q_DISABLE_COPY(KCharSelectTable)
|
||||
};
|
||||
|
||||
// NO D-Pointer needed, private internal class, no public API
|
||||
|
||||
class KCharSelectItemModel : public QAbstractTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
KCharSelectItemModel(const QList<uint> &chars, const QFont &font, QObject *parent)
|
||||
: QAbstractTableModel(parent)
|
||||
, m_chars(chars)
|
||||
, m_font(font)
|
||||
{
|
||||
if (!chars.isEmpty()) {
|
||||
m_columns = chars.count();
|
||||
} else {
|
||||
m_columns = 1;
|
||||
}
|
||||
}
|
||||
|
||||
enum internalRoles { CharacterRole = Qt::UserRole };
|
||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override
|
||||
{
|
||||
if (parent.isValid()) {
|
||||
return 0;
|
||||
}
|
||||
if (m_chars.count() % m_columns == 0) {
|
||||
return m_chars.count() / m_columns;
|
||||
} else {
|
||||
return m_chars.count() / m_columns + 1;
|
||||
}
|
||||
}
|
||||
int columnCount(const QModelIndex & = QModelIndex()) const override
|
||||
{
|
||||
return m_columns;
|
||||
}
|
||||
|
||||
void setFont(const QFont &font)
|
||||
{
|
||||
beginResetModel();
|
||||
m_font = font;
|
||||
endResetModel();
|
||||
}
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const override
|
||||
{
|
||||
int pos = m_columns * (index.row()) + index.column();
|
||||
if (pos >= m_chars.size() || index.row() < 0 || index.column() < 0) {
|
||||
return Qt::ItemIsDropEnabled;
|
||||
}
|
||||
return (Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
}
|
||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||
QMimeData *mimeData(const QModelIndexList &indexes) const override
|
||||
{
|
||||
if (indexes.size() != 1) {
|
||||
return nullptr;
|
||||
}
|
||||
QMimeData *mimeData = new QMimeData();
|
||||
char32_t character = data(indexes[0], CharacterRole).toUInt();
|
||||
mimeData->setText(QString::fromUcs4(&character, 1));
|
||||
return mimeData;
|
||||
}
|
||||
Qt::DropActions supportedDropActions() const override
|
||||
{
|
||||
return Qt::CopyAction;
|
||||
}
|
||||
QStringList mimeTypes() const override
|
||||
{
|
||||
return {QStringLiteral("text/plain")};
|
||||
}
|
||||
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
|
||||
|
||||
void setColumnCount(int columns);
|
||||
|
||||
QList<uint> chars() const
|
||||
{
|
||||
return m_chars;
|
||||
}
|
||||
|
||||
private:
|
||||
QList<uint> m_chars;
|
||||
QFont m_font;
|
||||
int m_columns;
|
||||
|
||||
Q_SIGNALS:
|
||||
void showCharRequested(uint c);
|
||||
};
|
||||
#endif // KCHARSELECT_P_H
|
||||
Reference in New Issue
Block a user