View Issue Details

IDProjectCategoryView StatusLast Update
0004014ScribusScripterpublic2006-07-24 20:45
ReporterLysander Assigned Tosubik  
PrioritynormalSeverityfeatureReproducibilityN/A
Status closedResolutionfixed 
PlatformKubuntu 6.06OSLinux 
Product Version1.3.3 
Fixed in Version1.3.3.3cvs 
Summary0004014: Litlle patch I wrote in order to add the function "duplicateObject" to the python API
DescriptionI wrote a patch to add the Python function duplicateObject to the python API. It works so far for me and perhaps other people are interested in it!
TagsNo tags attached.
Patch

Activities

2006-07-12 22:13

 

patch.txt (970 bytes)   
in cmdobj.h add after line 245
/*! docstring */
PyDoc_STRVAR(scribus_duplicateobject__doc__,
QT_TR_NOOP("duplicateObject([\"name\"]) -> string\n\
\n\
creates a Duplicate of the selected Object (or Selection Group).\n\
"));
/**
 Christian Hausknecht, 2006-07-12
 duplicate an object
*/
PyObject *scribus_duplicateobject(PyObject * /* self */, PyObject *args);

in cmdobj.cpp add after line 596
/*
 * added by Christian Hausknecht (christian.hausknecht@tu-clausthal.de)
 */
PyObject *scribus_duplicateobject(PyObject * /* self */, PyObject *args)
{
	char* name = const_cast<char*>("");
	if (!PyArg_ParseTuple(args, "|es", "utf-8", &name))
		return NULL;
	if(!checkHaveDocument())
		return NULL;
	// do the duplicate
	ScMW->slotEditCopy();
	ScMW->slotEditPaste();
	Py_INCREF(Py_None);
	return Py_None;
}

in scriptplugin.cpp 450
	// by Christian Hausknecht
	{const_cast<char*>("duplicateObject"), scribus_duplicateobject, METH_VARARGS, tr(scribus_duplicateobject__doc__)},
patch.txt (970 bytes)   

Lysander

2006-07-13 07:47

reporter   ~0011865

Hello again,

I probably forgot something in my code yesterday. I don't know if I have the time to add it today, as I am quite busy later on. So perhaps you wait a little to merge it with the official scribus code.

Ciao,
Christian

subik

2006-07-13 09:08

manager   ~0011868

ok, no prob

2006-07-24 10:56

 

patch2.txt (663 bytes)   
/*
 * added by Christian Hausknecht (christian.hausknecht@tu-clausthal.de)
 * line 596 - end in cmdobj.cpp
 */
PyObject *scribus_duplicateobject(PyObject * /* self */, PyObject *args)
{
	char* name = const_cast<char*>("");
	if (!PyArg_ParseTuple(args, "|es", "utf-8", &name)) {
		return NULL;
	}
	if(!checkHaveDocument()) {
		return NULL;
	}
	// Is there a special name given? Yes -> add this to selection
	PageItem *i = GetUniqueItem(QString::fromUtf8(name));
	if (i != NULL) {
		ScMW->doc->m_Selection->clear();
		ScMW->doc->m_Selection->addItem(i);
	}
	// do the duplicate
	ScMW->slotEditCopy();
	ScMW->slotEditPaste();
	Py_INCREF(Py_None);
	return Py_None;
}
patch2.txt (663 bytes)   

Lysander

2006-07-24 10:57

reporter   ~0011992

OK, in patch2.txt you will find the brand new code for the duplicateobject function. Now it can also handle a given object per name!

So imho it works now as all the rest of the Python functions!

I hope you like it :-)

Ciao,
Christian

2006-07-24 14:44

 

patch3.txt (672 bytes)   
/*
 * added by Christian Hausknecht (christian.hausknecht@tu-clausthal.de)
 * lines 596 - end in cmdobj.cpp
 */
PyObject *scribus_duplicateobject(PyObject * /* self */, PyObject *args)
{
	char* name = const_cast<char*>("");
	if (!PyArg_ParseTuple(args, "|es", "utf-8", &name)) {
		return NULL;
	}
	if(!checkHaveDocument()) {
		return NULL;
	}
	// Is there a special name given? Yes -> add this to selection
	if (ItemExists(QString::fromUtf8(name))) {
		ScMW->doc->m_Selection->clear();
		ScMW->doc->m_Selection->addItem(GetUniqueItem(QString::fromUtf8(name)));
	}
	// do the duplicate
	ScMW->slotEditCopy();
	ScMW->slotEditPaste();
	Py_INCREF(Py_None);
	return Py_None;
}
patch3.txt (672 bytes)   

Lysander

2006-07-24 14:47

reporter   ~0011995

I couldn't delete the patch2.txt I posted some hours ago. There was still a buggy behaviour I found. Now it should really work. It's in patch3.txt

Ciao,
Christian

subik

2006-07-24 15:14

manager   ~0011996

it's in 1333 and 134 cvs. I write one exception check for duplicateDocument('name_that_doesnt_exist') -> exception instead of silent procedure crash.

Anyway there are some differences between the cvs trees, so you can checkout both to see what's new ;)

thank you for this patch.

p.s.: for next time: use diff (kdiff etc.) utility to create patch file easy to apply against existing sources. It will be helpful for inserting into existing code.

Issue History

Date Modified Username Field Change
2006-07-12 22:13 Lysander New Issue
2006-07-12 22:13 Lysander File Added: patch.txt
2006-07-12 22:14 cbradney Status new => assigned
2006-07-12 22:14 cbradney Assigned To => subik
2006-07-13 07:47 Lysander Note Added: 0011865
2006-07-13 09:08 subik Note Added: 0011868
2006-07-24 10:56 Lysander File Added: patch2.txt
2006-07-24 10:57 Lysander Note Added: 0011992
2006-07-24 14:44 Lysander File Added: patch3.txt
2006-07-24 14:47 Lysander Note Added: 0011995
2006-07-24 15:14 subik Status assigned => resolved
2006-07-24 15:14 subik Fixed in Version => 1.3.3.3cvs
2006-07-24 15:14 subik Resolution open => fixed
2006-07-24 15:14 subik Note Added: 0011996
2006-07-24 20:44 cbradney Status resolved => closed