Subversion Repositories Scribus

Rev

Rev 1522 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
104 Franz 1
#include "cmdcolor.h"
2
#include "cmdutil.h"
82 Franz 3
 
935 subik 4
PyObject *scribus_colornames(PyObject */*self*/)
82 Franz 5
{
6
        CListe edc;
7
        PyObject *l;
8
        int cc = 0;
87 Franz 9
        edc = Carrier->HaveDoc ? Carrier->doc->PageColors : Carrier->Prefs.DColors;
82 Franz 10
        CListe::Iterator it;
11
        l = PyList_New(edc.count());
12
        for (it = edc.begin(); it != edc.end(); ++it)
771 subik 13
        {
877 cbradney 14
                PyList_SetItem(l, cc, PyString_FromString(it.key().utf8()));
82 Franz 15
                cc++;
771 subik 16
        }
82 Franz 17
        return l;
18
}
19
 
935 subik 20
PyObject *scribus_getcolor(PyObject */*self*/, PyObject* args)
82 Franz 21
{
22
        CListe edc;
935 subik 23
        char *Name = const_cast<char*>("");
82 Franz 24
        int c, m, y, k;
877 cbradney 25
        if (!PyArg_ParseTuple(args, "es", "utf-8", &Name))
82 Franz 26
                return NULL;
857 cbradney 27
        if (strcmp(Name, "") == 0)
28
        {
862 cbradney 29
                PyErr_SetString(PyExc_ValueError, QObject::tr("Cannot get a color with an empty name.","python error"));
857 cbradney 30
                return NULL;
31
        }
87 Franz 32
        edc = Carrier->HaveDoc ? Carrier->doc->PageColors : Carrier->Prefs.DColors;
877 cbradney 33
        QString col = QString::fromUtf8(Name);
82 Franz 34
        if (!edc.contains(col))
857 cbradney 35
        {
1522 cbradney 36
                PyErr_SetString(NotFoundError, QObject::tr("Color not found.","python error"));
857 cbradney 37
                return NULL;
38
        }
39
        edc[col].getCMYK(&c, &m, &y, &k);
82 Franz 40
        return Py_BuildValue("(iiii)", static_cast<long>(c), static_cast<long>(m), static_cast<long>(y), static_cast<long>(k));
41
}
42
 
1516 craig 43
PyObject *scribus_getcolorasrgb(PyObject */*self*/, PyObject* args)
44
{
45
        CListe edc;
46
        char *Name = const_cast<char*>("");
47
        if (!PyArg_ParseTuple(args, "es", "utf-8", &Name))
48
                return NULL;
49
        if (strcmp(Name, "") == 0)
50
        {
51
                PyErr_SetString(PyExc_ValueError, QObject::tr("Cannot get a colour with an empty name.","python error"));
52
                return NULL;
53
        }
54
        edc = Carrier->HaveDoc ? Carrier->doc->PageColors : Carrier->Prefs.DColors;
55
        QString col = QString::fromUtf8(Name);
56
        if (!edc.contains(col))
57
        {
1970 mrdocs 58
                PyErr_SetString(NotFoundError, QObject::tr("Color not found","python error"));
1516 craig 59
                return NULL;
60
        }
61
        QColor rgb = edc[col].getRGBColor();
62
        return Py_BuildValue("(iii)", static_cast<long>(rgb.red()), static_cast<long>(rgb.green()), static_cast<long>(rgb.blue()));
63
}
64
 
935 subik 65
PyObject *scribus_setcolor(PyObject */*self*/, PyObject* args)
82 Franz 66
{
935 subik 67
        char *Name = const_cast<char*>("");
82 Franz 68
        int c, m, y, k;
877 cbradney 69
        if (!PyArg_ParseTuple(args, "esiiii", "utf-8", &Name, &c, &m, &y, &k))
82 Franz 70
                return NULL;
857 cbradney 71
        if (strcmp(Name, "") == 0)
719 subik 72
        {
862 cbradney 73
                PyErr_SetString(PyExc_ValueError, QObject::tr("Cannot change a color with an empty name.","python error"));
719 subik 74
                return NULL;
75
        }
877 cbradney 76
        QString col = QString::fromUtf8(Name);
82 Franz 77
        if (Carrier->HaveDoc)
332 Franz 78
        {
82 Franz 79
                if (!Carrier->doc->PageColors.contains(col))
719 subik 80
                {
1522 cbradney 81
                        PyErr_SetString(NotFoundError, QObject::tr("Color not found in document.","python error"));
719 subik 82
                        return NULL;
83
                }
332 Franz 84
                Carrier->doc->PageColors[col].setColor(c, m, y, k);
85
        }
82 Franz 86
        else
332 Franz 87
        {
82 Franz 88
                if (!Carrier->Prefs.DColors.contains(col))
719 subik 89
                {
1522 cbradney 90
                        PyErr_SetString(NotFoundError, QObject::tr("Color not found in default colors.","python error"));
719 subik 91
                        return NULL;
92
                }
82 Franz 93
                Carrier->Prefs.DColors[col].setColor(c, m, y, k);
332 Franz 94
        }
719 subik 95
        Py_INCREF(Py_None);
82 Franz 96
        return Py_None;
97
}
98
 
935 subik 99
PyObject *scribus_newcolor(PyObject */*self*/, PyObject* args)
82 Franz 100
{
935 subik 101
        char *Name = const_cast<char*>("");
82 Franz 102
        int c, m, y, k;
877 cbradney 103
        if (!PyArg_ParseTuple(args, "esiiii", "utf-8", &Name, &c, &m, &y, &k))
82 Franz 104
                return NULL;
857 cbradney 105
        if (strcmp(Name, "") == 0)
719 subik 106
        {
862 cbradney 107
                PyErr_SetString(PyExc_ValueError, QObject::tr("Cannot create a color with an empty name.","python error"));
719 subik 108
                return NULL;
109
        }
877 cbradney 110
        QString col = QString::fromUtf8(Name);
82 Franz 111
        if (Carrier->HaveDoc)
112
                {
719 subik 113
                        if (!Carrier->doc->PageColors.contains(col))
114
                                Carrier->doc->PageColors.insert(col, CMYKColor(c, m, y, k));
115
                        else
862 cbradney 116
                                // FIXME: Given that we have a changeColor function, should we really be
117
                                // silently changing colors in newColor?
719 subik 118
                                Carrier->doc->PageColors[col].setColor(c, m, y, k);
82 Franz 119
                }
120
        else
121
                {
719 subik 122
                        if (!Carrier->Prefs.DColors.contains(col))
123
                                Carrier->Prefs.DColors.insert(col, CMYKColor(c, m, y, k));
124
                        else
862 cbradney 125
                                // FIXME: Given that we have a changeColor function, should we really be
126
                                // silently changing colors in newColor?
719 subik 127
                                Carrier->Prefs.DColors[col].setColor(c, m, y, k);
82 Franz 128
                }
719 subik 129
        Py_INCREF(Py_None);
82 Franz 130
        return Py_None;
131
}
132
 
935 subik 133
PyObject *scribus_delcolor(PyObject */*self*/, PyObject* args)
82 Franz 134
{
935 subik 135
        char *Name = const_cast<char*>("");
136
        char *Repl = const_cast<char*>("None");
877 cbradney 137
        if (!PyArg_ParseTuple(args, "es|es", "utf-8", &Name, "utf-8", &Repl))
82 Franz 138
                return NULL;
877 cbradney 139
        if (Name == "")
719 subik 140
        {
862 cbradney 141
                PyErr_SetString(PyExc_ValueError, QObject::tr("Cannot delete a color with an empty name.","python error"));
719 subik 142
                return NULL;
143
        }
877 cbradney 144
        QString col = QString::fromUtf8(Name);
145
        QString rep = QString::fromUtf8(Repl);
82 Franz 146
        if (Carrier->HaveDoc)
719 subik 147
        {
82 Franz 148
                if (Carrier->doc->PageColors.contains(col) && (Carrier->doc->PageColors.contains(rep) || (rep == "None")))
149
                        {
719 subik 150
                                Carrier->doc->PageColors.remove(col);
151
                                ReplaceColor(col, rep);
82 Franz 152
                        }
857 cbradney 153
                else
154
                {
1522 cbradney 155
                        PyErr_SetString(NotFoundError, QObject::tr("Color not found in document.","python error"));
857 cbradney 156
                        return NULL;
157
                }
719 subik 158
        }
82 Franz 159
        else
719 subik 160
        {
82 Franz 161
                if (Carrier->Prefs.DColors.contains(col))
162
                        Carrier->Prefs.DColors.remove(col);
857 cbradney 163
                else
164
                {
1522 cbradney 165
                        PyErr_SetString(NotFoundError, QObject::tr("Color not found in default colors.","python error"));
857 cbradney 166
                        return NULL;
167
                }
719 subik 168
        }
169
        Py_INCREF(Py_None);
82 Franz 170
        return Py_None;
171
}
172
 
935 subik 173
PyObject *scribus_replcolor(PyObject */*self*/, PyObject* args)
82 Franz 174
{
935 subik 175
        char *Name = const_cast<char*>("");
176
        char *Repl = const_cast<char*>("None");
719 subik 177
        //FIXME: this should definitely use keyword arguments
877 cbradney 178
        if (!PyArg_ParseTuple(args, "es|es", "utf-8", &Name, "utf-8", &Repl))
82 Franz 179
                return NULL;
719 subik 180
        if(!checkHaveDocument())
181
                return NULL;
857 cbradney 182
        if (strcmp(Name, "") == 0)
719 subik 183
        {
862 cbradney 184
                PyErr_SetString(PyExc_ValueError, QObject::tr("Cannot replace a color with an empty name.","python error"));
719 subik 185
                return NULL;
186
        }
877 cbradney 187
        QString col = QString::fromUtf8(Name);
188
        QString rep = QString::fromUtf8(Repl);
82 Franz 189
        if (Carrier->doc->PageColors.contains(col) && (Carrier->doc->PageColors.contains(rep) || (rep == "None")))
190
                ReplaceColor(col, rep);
857 cbradney 191
        else
192
        {
1522 cbradney 193
                PyErr_SetString(NotFoundError, QObject::tr("Color not found.","python error"));
857 cbradney 194
                return NULL;
195
        }
719 subik 196
        Py_INCREF(Py_None);
82 Franz 197
        return Py_None;
198
}