diff --git a/scribus/plugins/scriptplugin/cmddialog.cpp b/scribus/plugins/scriptplugin/cmddialog.cpp index 263188fd087f6bf68e43bdd1392ab112a9aee185..f13efac127b4a93a998abe3497f246a8786c1b12 100644 --- a/scribus/plugins/scriptplugin/cmddialog.cpp +++ b/scribus/plugins/scriptplugin/cmddialog.cpp @@ -123,6 +123,47 @@ PyObject *scribus_valuedialog(PyObject* /* self */, PyObject* args) return PyUnicode_FromString(txt.toUtf8()); } +PyObject *scribus_itemdialog(PyObject* /* self */, PyObject* args) +{ + char *caption = const_cast(""); + char *message = const_cast(""); + PyObject* listObject; + if (!PyArg_ParseTuple(args, "esesO", "utf-8", &caption, "utf-8", &message, &listObject)) + return nullptr; + + QStringList items; + PyObject* list = PySequence_List(listObject); + if (list == nullptr) + { + PyErr_SetString(PyExc_ValueError, QObject::tr("Expected a list of options", "python error").toLocal8Bit().constData()); + return nullptr; + } + + int n = PyList_Size(list); + for (int i = 0; i < n; ++i) + { + PyObject* itemObject = PyList_GetItem(list, i); + char *item = const_cast(""); + if (!PyArg_Parse(itemObject, "es", "utf-8", &item)) + { + PyErr_SetString(PyExc_ValueError, QObject::tr("Items must be strings", "python error").toLocal8Bit().constData()); + return nullptr; + } + items << QString::fromUtf8(item); + } + + QApplication::changeOverrideCursor(QCursor(Qt::ArrowCursor)); + bool ok; + QString choice = QInputDialog::getItem(ScCore->primaryMainWindow(), + QString::fromUtf8(caption), + QString::fromUtf8(message), + items, + 0, + false, + &ok); + return PyUnicode_FromString(choice.toUtf8()); +} + PyObject *scribus_newstyledialog(PyObject*, PyObject* args) { if (!checkHaveDocument()) @@ -155,6 +196,7 @@ void cmddialogdocwarnings() { QStringList s; s << scribus_filedialog__doc__ + << scribus_itemdialog__doc__ << scribus_messagebox__doc__ << scribus_newdocdialog__doc__ << scribus_newstyledialog__doc__ diff --git a/scribus/plugins/scriptplugin/cmddialog.h b/scribus/plugins/scriptplugin/cmddialog.h index 6940b730d5dda85105447c9e28fb274652e2eb93..284eed342269d0c3d1c08c6561dc857428c487bc 100644 --- a/scribus/plugins/scriptplugin/cmddialog.h +++ b/scribus/plugins/scriptplugin/cmddialog.h @@ -103,6 +103,16 @@ Example: valueDialog('title', 'text in the window', 'optional')\n\ /* 09/24/2004 petr vanek */ PyObject *scribus_valuedialog(PyObject * /*self*/, PyObject* args); +/*! docstring */ +PyDoc_STRVAR(scribus_itemdialog__doc__, +QT_TR_NOOP("itemDialog(caption, message, list_of_strings) -> string\n\ +\n\ +Shows the common 'Make a choice' dialog and returns the selected value as a string\n\ +Parameters: window title, text in the window and a list of string values.\n\ +\n\ +Example: itemDialog('title', 'text in the window', ['apples', 'pears', 'raisins'])\n\ +")); +PyObject *scribus_itemdialog(PyObject * /*self*/, PyObject* args); PyDoc_STRVAR(scribus_newstyledialog__doc__, QT_TR_NOOP("newStyleDialog() -> string\n\ diff --git a/scribus/plugins/scriptplugin/scriptplugin.cpp b/scribus/plugins/scriptplugin/scriptplugin.cpp index 2836dfb9672dd54a06ee5ff98f8084e54a9b9f7c..d7ade0199a4602af94a45906d8cf676d33493c0c 100644 --- a/scribus/plugins/scriptplugin/scriptplugin.cpp +++ b/scribus/plugins/scriptplugin/scriptplugin.cpp @@ -441,6 +441,7 @@ PyMethodDef scribus_methods[] = { {const_cast("isLocked"), scribus_islocked, METH_VARARGS, tr(scribus_islocked__doc__)}, {const_cast("isPDFBookmark"), scribus_ispdfbookmark, METH_VARARGS, tr(scribus_ispdfbookmark__doc__)}, {const_cast("isSpotColor"), scribus_isspotcolor, METH_VARARGS, tr(scribus_isspotcolor__doc__)}, + {const_cast("itemDialog"), scribus_itemdialog, METH_VARARGS, tr(scribus_itemdialog__doc__)}, {const_cast("layoutText"), scribus_layouttext, METH_VARARGS, tr(scribus_layouttext__doc__)}, {const_cast("layoutTextChain"), scribus_layouttextchain, METH_VARARGS, tr(scribus_layouttextchain__doc__)}, {const_cast("linkTextFrames"), scribus_linktextframes, METH_VARARGS, tr(scribus_linktextframes__doc__)},