Make the calibre style object accessible in Python

This commit is contained in:
Kovid Goyal 2021-12-06 06:39:43 +05:30
parent aea448a5a4
commit 16bae8546e
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 35 additions and 22 deletions

View File

@ -1201,7 +1201,9 @@ class Application(QApplication):
transient_scroller = transient_scroller() transient_scroller = transient_scroller()
icon_map[(QStyle.StandardPixmap.SP_CustomBase.value & 0xf0000000) + 1] = I('close-for-light-theme.png') icon_map[(QStyle.StandardPixmap.SP_CustomBase.value & 0xf0000000) + 1] = I('close-for-light-theme.png')
icon_map[(QStyle.StandardPixmap.SP_CustomBase.value & 0xf0000000) + 2] = I('close-for-dark-theme.png') icon_map[(QStyle.StandardPixmap.SP_CustomBase.value & 0xf0000000) + 2] = I('close-for-dark-theme.png')
self.pi.load_style(icon_map, transient_scroller) self.calibre_style = style = self.pi.CalibreStyle(transient_scroller)
style.set_icon_map(icon_map)
self.setStyle(style)
def _send_file_open_events(self): def _send_file_open_events(self):
with self._file_open_lock: with self._file_open_lock:

View File

@ -118,7 +118,7 @@ dpiScaled(qreal value) {
#endif #endif
} }
CalibreStyle::CalibreStyle(const QHash<unsigned long, QString> &icmap, int transient_scroller) : QProxyStyle(QString::fromUtf8("Fusion")), icon_map(icmap), transient_scroller(transient_scroller) { CalibreStyle::CalibreStyle(int transient_scroller) : QProxyStyle(QString::fromUtf8("Fusion")), icon_map(), transient_scroller(transient_scroller) {
setObjectName(QString("calibre")); setObjectName(QString("calibre"));
desktop_environment = detectDesktopEnvironment(); desktop_environment = detectDesktopEnvironment();
button_layout = static_cast<QDialogButtonBox::ButtonLayout>(QProxyStyle::styleHint(SH_DialogButtonLayout)); button_layout = static_cast<QDialogButtonBox::ButtonLayout>(QProxyStyle::styleHint(SH_DialogButtonLayout));
@ -126,6 +126,10 @@ CalibreStyle::CalibreStyle(const QHash<unsigned long, QString> &icmap, int trans
button_layout = QDialogButtonBox::GnomeLayout; button_layout = QDialogButtonBox::GnomeLayout;
} }
void CalibreStyle::set_icon_map(QHash<unsigned long, QString> &ic) {
icon_map = ic;
}
int CalibreStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const { int CalibreStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const {
switch (hint) { switch (hint) {
case SH_DialogButtonBox_ButtonsHaveIcons: case SH_DialogButtonBox_ButtonsHaveIcons:
@ -377,11 +381,6 @@ void CalibreStyle::drawControl(ControlElement element, const QStyleOption *optio
QProxyStyle::drawControl(element, option, painter, widget); QProxyStyle::drawControl(element, option, painter, widget);
} }
int load_style(const QHash<unsigned long,QString> &icon_map, int transient_scroller) {
QApplication::setStyle(new CalibreStyle(icon_map, transient_scroller));
return 0;
}
class NoActivateStyle: public QProxyStyle { class NoActivateStyle: public QProxyStyle {
public: public:
NoActivateStyle(QStyle *base) : QProxyStyle(base) { } NoActivateStyle(QStyle *base) : QProxyStyle(base) { }

View File

@ -90,14 +90,15 @@ private:
}; };
class CalibreStyle : public QProxyStyle { class CalibreStyle : public QProxyStyle {
private: protected:
const QHash<unsigned long, QString> icon_map; QHash<unsigned long, QString> icon_map;
QByteArray desktop_environment; QByteArray desktop_environment;
QDialogButtonBox::ButtonLayout button_layout; QDialogButtonBox::ButtonLayout button_layout;
int transient_scroller; int transient_scroller;
public: public:
CalibreStyle(const QHash<unsigned long, QString> &icmap, int transient_scroller); CalibreStyle(int transient_scroller);
void set_icon_map(QHash<unsigned long, QString> &icon_map);
virtual int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const; virtual int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const;
virtual QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption * option = 0, const QWidget * widget = 0) const; virtual QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption * option = 0, const QWidget * widget = 0) const;
virtual int pixelMetric(PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0) const; virtual int pixelMetric(PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0) const;
@ -157,7 +158,6 @@ private:
SpinAnimator m_animator; SpinAnimator m_animator;
}; };
int load_style(const QHash<unsigned long,QString> &icon_map, int transient_scroller=0);
void set_no_activate_on_click(QWidget *widget); void set_no_activate_on_click(QWidget *widget);
void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark); void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark);
void set_menu_on_action(QAction* ac, QMenu* menu); void set_menu_on_action(QAction* ac, QMenu* menu);

View File

@ -7,11 +7,33 @@
%ModuleHeaderCode %ModuleHeaderCode
#include <QPainter> #include <QPainter>
int load_style(const QHash<unsigned long,QString> &icon_map, int transient_scroller);
void set_no_activate_on_click(QWidget *widget); void set_no_activate_on_click(QWidget *widget);
void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark); void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark);
%End %End
class CalibreStyle : QProxyStyle {
%TypeHeaderCode
#include <QProgressIndicator.h>
%End
public:
CalibreStyle(int transient_scroller);
void set_icon_map(SIP_PYDICT icon_map_);
%MethodCode
QHash<unsigned long, QString> icon_map;
PyObject *key, *value;
Py_ssize_t pos = 0;
while (PyDict_Next(a0, &pos, &key, &value)) {
icon_map.insert(PyLong_AsUnsignedLong(key), QString::fromUtf8(PyUnicode_AsUTF8(value)));
}
sipCpp->set_icon_map(icon_map);
%End
};
class SpinAnimator : QObject { class SpinAnimator : QObject {
%TypeHeaderCode %TypeHeaderCode
@ -74,16 +96,6 @@ signals:
}; };
int load_style(SIP_PYDICT icon_map_, int transient_scroller);
%MethodCode
QHash<unsigned long,QString> icon_map;
PyObject *key, *value;
Py_ssize_t pos = 0;
while (PyDict_Next(a0, &pos, &key, &value)) {
icon_map.insert(PyLong_AsUnsignedLong(key), QString::fromUtf8(PyUnicode_AsUTF8(value)));
}
load_style(icon_map, a1);
%End
void set_no_activate_on_click(QWidget *widget); void set_no_activate_on_click(QWidget *widget);
void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark) /ReleaseGIL/; void draw_snake_spinner(QPainter &painter, QRect rect, int angle, const QColor & light, const QColor & dark) /ReleaseGIL/;
void set_menu_on_action(QAction* ac, QMenu* menu); void set_menu_on_action(QAction* ac, QMenu* menu);