1 /*
2 For general Scribus (>=1.3.2) copyright and licensing information please refer
3 to the COPYING file provided with the program. Following this notice may exist
4 a copyright and/or license notice that predates the release of Scribus 1.3.2
5 for which a new license (GPL+exception) is in place.
6 */
7 #include "javadocs.h"
8
9 #include <QHBoxLayout>
10 #include <QVBoxLayout>
11 #include <QListWidget>
12 #include <QMessageBox>
13 #include <QPixmap>
14 #include <QPushButton>
15 #include <QRegExp>
16 #include <QTextEdit>
17 #include <QToolTip>
18
19 #include "commonstrings.h"
20 #include "editor.h"
21 #include "query.h"
22 #include "scpage.h"
23 #include "scribusdoc.h"
24 #include "ui/scmessagebox.h"
25 #include "iconmanager.h"
26
27
JavaDocs(QWidget * parent,ScribusDoc * doc,ScribusView * vie)28 JavaDocs::JavaDocs(QWidget* parent, ScribusDoc *doc, ScribusView* vie) : QDialog( parent )
29 {
30 setModal(true);
31 setWindowTitle( tr( "Edit JavaScripts" ) );
32 setWindowIcon(IconManager::instance().loadIcon("AppIcon.png"));
33 m_Doc = doc;
34 m_View = vie;
35 JavaDocsLayout = new QHBoxLayout(this);
36 JavaDocsLayout->setContentsMargins(9, 9, 9, 9);
37 JavaDocsLayout->setSpacing(6);
38
39 Scripts = new QListWidget( this );
40 Scripts->setMinimumSize( QSize( 150, 200 ) );
41 QMap<QString,QString>::Iterator it;
42 for (it = m_Doc->JavaScripts.begin(); it != m_Doc->JavaScripts.end(); ++it)
43 Scripts->addItem(it.key());
44 JavaDocsLayout->addWidget( Scripts );
45
46 Layout1 = new QVBoxLayout;
47 Layout1->setContentsMargins(0, 0, 0, 0);
48 Layout1->setSpacing(6);
49
50 EditScript = new QPushButton( tr( "&Edit..." ), this);
51 Layout1->addWidget( EditScript );
52
53 AddScript = new QPushButton( tr( "&Add..." ), this);
54 Layout1->addWidget( AddScript );
55
56 DeleteScript = new QPushButton( tr( "&Delete" ), this);
57 Layout1->addWidget( DeleteScript );
58 QSpacerItem* spacer = new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding );
59 Layout1->addItem( spacer );
60
61 ExitDia = new QPushButton( tr( "&Close" ), this);
62 ExitDia->setDefault( true );
63 Layout1->addWidget( ExitDia );
64 if (m_Doc->JavaScripts.count() == 0)
65 {
66 EditScript->setEnabled(false);
67 DeleteScript->setEnabled(false);
68 }
69 JavaDocsLayout->addLayout( Layout1 );
70 connect(AddScript, SIGNAL(clicked()), this, SLOT(slotAdd()));
71 connect(EditScript, SIGNAL(clicked()), this, SLOT(slotEdit()));
72 connect(DeleteScript, SIGNAL(clicked()), this, SLOT(slotDelete()));
73 connect(ExitDia, SIGNAL(clicked()), this, SLOT(accept()));
74 connect(Scripts, SIGNAL(itemActivated (QListWidgetItem *)), this, SLOT(slotEdit()));
75 connect(Scripts, SIGNAL(itemSelectionChanged()), this, SLOT(slotSelectionChanged()));
76 AddScript->setToolTip( "<qt>" + tr( "Adds a new Script, predefines a function with the same name. If you want to use this script as an \"Open Action\" script be sure not to change the name of the function." ) + "</qt>" );
77 }
78
slotAdd()79 void JavaDocs::slotAdd()
80 {
81 QString nam;
82 Query dia(this, "tt", true, tr("&New Script:"), tr("New Script"));
83 dia.setEditText( tr("New Script"), false );
84 dia.setTestList(m_Doc->JavaScripts.keys());
85 if (dia.exec())
86 {
87 nam = dia.getEditText();
88 nam.replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%\\.]"), "_" );
89 Editor* dia2 = new Editor(this, "", m_View);
90 dia2->EditTex->setText("function "+nam+"()\n{\n}");
91 if (dia2->exec())
92 {
93 m_Doc->JavaScripts[nam] = dia2->EditTex->toPlainText();
94 Scripts->addItem(nam);
95 Scripts->setCurrentRow(Scripts->count() - 1);
96 emit docChanged(false);
97 }
98 delete dia2;
99 }
100 }
101
slotEdit()102 void JavaDocs::slotEdit()
103 {
104 QListWidgetItem* currentItem = Scripts->currentItem();
105 if (!currentItem)
106 return;
107 QString name = currentItem->text();
108 Editor* dia2 = new Editor(this, m_Doc->JavaScripts[name], m_View);
109 if (dia2->exec())
110 {
111 m_Doc->JavaScripts[name] = dia2->EditTex->toPlainText();
112 emit docChanged(false);
113 }
114 delete dia2;
115 }
116
slotDelete()117 void JavaDocs::slotDelete()
118 {
119 QListWidgetItem* currentItem = Scripts->currentItem();
120 if (!currentItem)
121 return;
122
123 int exit = ScMessageBox::warning(this,
124 CommonStrings::trWarning,
125 tr("Do you really want to delete this script?"),
126 QMessageBox::Yes | QMessageBox::No,
127 QMessageBox::NoButton, // GUI default
128 QMessageBox::Yes); // batch default
129 if (exit == QMessageBox::Yes)
130 {
131 QString name = currentItem->text();
132 m_Doc->JavaScripts.remove(name);
133 Scripts->clear();
134 QMap<QString,QString>::Iterator it;
135 for (it = m_Doc->JavaScripts.begin(); it != m_Doc->JavaScripts.end(); ++it)
136 Scripts->addItem(it.key());
137 if (m_Doc->JavaScripts.count() == 0)
138 {
139 EditScript->setEnabled(false);
140 DeleteScript->setEnabled(false);
141 }
142 emit docChanged(false);
143 }
144 }
145
slotSelectionChanged()146 void JavaDocs::slotSelectionChanged()
147 {
148 QListWidgetItem* currentItem = Scripts->currentItem();
149 EditScript->setEnabled(currentItem != nullptr);
150 DeleteScript->setEnabled(currentItem != nullptr);
151 }
152