1
0
mirror of https://github.com/clementine-player/Clementine synced 2025-01-31 11:35:24 +01:00

Convert QObject subclasses to clementine wrapped python types properly when calling python functions

This commit is contained in:
David Sansome 2011-01-15 17:59:33 +00:00
parent 610399319e
commit 5c29a62b19
5 changed files with 59 additions and 1 deletions

View File

@ -28,3 +28,7 @@
%Include songloader.sip
%Include taskmanager.sip
%Include uiinterface.sip
// Remember: when adding a class that inherits from QObject, add it to the list
// in scriptinterface.sip as well, or else it won't cast properly when calling
// python slots.

View File

@ -21,7 +21,7 @@ public:
LibraryBackend* library_backend() const;
// PlaylistBackend* playlist_backend() const;
PlaylistSequence* sequence() const;
// PlaylistParser* parser() const;
PlaylistParser* parser() const;
public slots:
void New(const QString& name, const SongList& songs = SongList());

View File

@ -4,6 +4,53 @@ class ScriptInterface : QObject {
#include "scripting/scriptinterface.h"
%End
%ConvertToSubClassCode
// Any classes that inherit from QObject must be added to this list
#define CLASS(name) {sipName_##name, &sipType_##name}
static struct class_list {
const char *name;
sipTypeDef **type;
} list[] = {
CLASS(LibraryBackend),
CLASS(MergedProxyModel),
CLASS(NetworkAccessManager),
CLASS(ParserBase),
CLASS(Player),
CLASS(Playlist),
CLASS(PlaylistManager),
CLASS(PlaylistParser),
CLASS(PlaylistSequence),
CLASS(Queue),
CLASS(RadioModel),
CLASS(RadioService),
CLASS(ScriptInterface),
CLASS(SettingsDialog),
CLASS(SongLoader),
CLASS(TaskManager),
CLASS(UIInterface),
{0, 0}
};
#undef CLASS
sipType = NULL;
for (int i=0 ; ; ++i) {
struct class_list* p = &list[i];
if (!p->name) {
break;
}
if (sipCpp->inherits(p->name)) {
sipType = *p->type;
break;
}
}
%End
public:
void Abort();
signals:
void SettingsDialogRequested();

View File

@ -27,6 +27,10 @@ ScriptInterface::ScriptInterface(Script* script, QObject* parent)
{
}
void ScriptInterface::Abort() {
abort();
}
void ScriptInterface::ShowSettingsDialog() {
emit SettingsDialogRequested();
}

View File

@ -31,6 +31,9 @@ class ScriptInterface : public QObject {
public:
ScriptInterface(Script* script, QObject* parent = 0);
// Gdb will break here
void Abort();
public slots:
// Callable by C++
void ShowSettingsDialog();