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 "editor.h"
8 #include "iconmanager.h"
9 #include "prefsmanager.h"
10 #include "prefsfile.h"
11 #include "prefscontext.h"
12 #include "scribusapp.h"
13 #include "scribusview.h"
14 #include "selfield.h"
15 
16 #include <QFile>
17 #include <QTextStream>
18 #include <QTextEdit>
19 #include <QTextCursor>
20 #include <QFileDialog>
21 #include <QPixmap>
22 #include <QVBoxLayout>
23 #include <QMenu>
24 #include <QMenuBar>
25 #include <QAction>
26 #ifdef Q_OS_MAC
27 	#include <QPushButton>
28 	#include <QVBoxLayout>
29 #endif
30 
31 
32 
Editor(QWidget * parent,const QString & daten,ScribusView * vie)33 Editor::Editor( QWidget* parent, const QString& daten, ScribusView* vie) : QDialog( parent )
34 {
35 	setModal(true);
36 	setWindowTitle(tr("Editor"));
37 
38 	IconManager& im = IconManager::instance();
39 	setWindowIcon(im.loadIcon("AppIcon.png"));
40 	view = vie;
41 	dirs = PrefsManager::instance().prefsFile->getContext("dirs");
42 	EditorLayout = new QVBoxLayout(this);
43 	EditTex = new QTextEdit(this);
44 	newAct = new QAction(im.loadIcon("16/document-new.png"), tr("&New"), this);
45 	newAct->setShortcut(tr("Ctrl+N"));
46 	connect(newAct, SIGNAL(triggered()), EditTex, SLOT(clear()));
47 	openAct = new QAction(im.loadIcon("16/document-open.png"), tr("&Open..."), this);
48 	connect(openAct, SIGNAL(triggered()), this, SLOT(OpenScript()));
49 	saveAsAct = new QAction( tr("Save &As..."), this);
50 	connect(saveAsAct, SIGNAL(triggered()), this, SLOT(SaveAs()));
51 	saveExitAct = new QAction( tr("&Save and Exit"), this);
52 	connect(saveExitAct, SIGNAL(triggered()), this, SLOT(accept()));
53 	exitAct = new QAction( tr("&Exit without Saving"), this);
54 	connect(exitAct, SIGNAL(triggered()), this, SLOT(reject()));
55 	undoAct = new QAction(im.loadIcon("16/edit-undo.png"), tr("&Undo"), this);
56 	undoAct->setShortcut(tr("Ctrl+Z"));
57 	connect(undoAct, SIGNAL(triggered()), EditTex, SLOT(undo()));
58 	redoAct = new QAction(im.loadIcon("16/edit-redo.png"),  tr("&Redo"), this);
59 	connect(redoAct, SIGNAL(triggered()), EditTex, SLOT(redo()));
60 	cutAct = new QAction(im.loadIcon("16/edit-cut.png"), tr("Cu&t"), this);
61 	cutAct->setShortcut(tr("Ctrl+X"));
62 	connect(cutAct, SIGNAL(triggered()), EditTex, SLOT(cut()));
63 	copyAct = new QAction(im.loadIcon("16/edit-copy.png"), tr("&Copy"), this);
64 	copyAct->setShortcut(tr("Ctrl+C"));
65 	connect(copyAct, SIGNAL(triggered()), EditTex, SLOT(copy()));
66 	pasteAct = new QAction(im.loadIcon("16/edit-paste.png"), tr("&Paste"), this);
67 	pasteAct->setShortcut(tr("Ctrl-V"));
68 	connect(pasteAct, SIGNAL(triggered()), EditTex, SLOT(paste()));
69 	clearAct = new QAction(im.loadIcon("16/edit-delete.png"), tr("C&lear"), this);
70 	connect(clearAct, SIGNAL(triggered()), this, SLOT(del()));
71 	getFieldAct = new QAction( tr("&Get Field Names"), this);
72 	connect(getFieldAct, SIGNAL(triggered()), this, SLOT(GetFieldNames()));
73 	fmenu = new QMenu( tr("&File"));
74 	fmenu->addAction(newAct);
75 	fmenu->addAction(openAct);
76 	fmenu->addAction(saveAsAct);
77 	fmenu->addSeparator();
78 	fmenu->addAction(saveExitAct);
79 	fmenu->addAction(exitAct);
80 	emenu = new QMenu( tr("&Edit"));
81 	emenu->addAction(undoAct);
82 	emenu->addAction(redoAct);
83 	emenu->addSeparator();
84 	emenu->addAction(cutAct);
85 	emenu->addAction(copyAct);
86 	emenu->addAction(pasteAct);
87 	emenu->addAction(clearAct);
88 	emenu->addSeparator();
89 	emenu->addAction(getFieldAct);
90 	menuBar = new QMenuBar(this);
91 	menuBar->addMenu(fmenu);
92 	menuBar->addMenu(emenu);
93 	EditorLayout->setMenuBar( menuBar );
94 	EditTex->setMinimumSize( QSize( 400, 400 ) );
95 	EditTex->setPlainText(daten);
96 	EditorLayout->addWidget( EditTex );
97 #ifdef Q_OS_MAC
98 	Layout1_2 = new QHBoxLayout;
99 	Layout1_2->setSpacing(6);
100 	Layout1_2->setContentsMargins(0, 0, 0, 0);
101 	QSpacerItem* spacerr = new QSpacerItem( 2, 2, QSizePolicy::Expanding, QSizePolicy::Minimum );
102 	Layout1_2->addItem( spacerr );
103 	PushButton1 = new QPushButton( this );
104 	PushButton1->setText( tr( "OK" ) );
105 	PushButton1->setDefault( true );
106 	Layout1_2->addWidget( PushButton1 );
107 	PushButton2 = new QPushButton( this );
108 	PushButton2->setText( tr( "Cancel" ) );
109 	Layout1_2->addWidget( PushButton2 );
110 	EditorLayout->addLayout( Layout1_2 );
111 	connect(PushButton1, SIGNAL(clicked()), this, SLOT(accept()));
112 	connect(PushButton2, SIGNAL(clicked()), this, SLOT(reject()));
113 #endif
114 
115 	connect(ScQApp, SIGNAL(iconSetChanged()), this, SLOT(iconSetChange()));
116 }
117 
del()118 void Editor::del()
119 {
120 	QTextCursor curs = EditTex->textCursor();
121 	curs.deleteChar();
122 	EditTex->setTextCursor(curs);
123 }
124 
iconSetChange()125 void Editor::iconSetChange()
126 {
127 	IconManager& im=IconManager::instance();
128 
129 	setWindowIcon(im.loadIcon("AppIcon.png"));
130 
131 	newAct->setIcon(im.loadIcon("16/document-new.png"));
132 	openAct->setIcon(im.loadIcon("16/document-open.png"));
133 	undoAct->setIcon(im.loadIcon("16/edit-undo.png"));
134 	redoAct->setIcon(im.loadIcon("16/edit-redo.png"));
135 	cutAct->setIcon(im.loadIcon("16/edit-cut.png"));
136 	copyAct->setIcon(im.loadIcon("16/edit-copy.png"));
137 	pasteAct->setIcon(im.loadIcon("16/edit-paste.png"));
138 	clearAct->setIcon(im.loadIcon("16/edit-delete.png"));
139 }
140 
GetFieldNames()141 void Editor::GetFieldNames()
142 {
143 	if (view != nullptr)
144 	{
145 		SelectFields* dia = new SelectFields(this, "", "", view->m_doc, 0);
146 		if (dia->exec())
147 			EditTex->insertPlainText(dia->S_Fields);
148 		delete dia;
149 	}
150 }
151 
OpenScript()152 void Editor::OpenScript()
153 {
154 	QString fileName = QFileDialog::getOpenFileName(this, dirs->get("editor_open", "."), tr("JavaScripts (*.js);;All Files (*)"));
155 	if (!fileName.isEmpty())
156 	{
157 		dirs->set("editor_open", fileName.left(fileName.lastIndexOf("/")));
158 		QFile file( fileName );
159 		if ( file.open( QIODevice::ReadOnly ) )
160 		{
161 			QTextStream ts( &file );
162 			EditTex->setPlainText( ts.readAll() );
163 			file.close();
164 		}
165 	}
166 }
167 
SaveAs()168 void Editor::SaveAs()
169 {
170 	QString fn = QFileDialog::getSaveFileName(this, dirs->get("editor_save", "."), tr("JavaScripts (*.js);;All Files (*)"));
171 	if (!fn.isEmpty())
172 	{
173 		dirs->set("editor_save", fn.left(fn.lastIndexOf("/")));
174 		QFile file( fn );
175 		if ( file.open( QIODevice::WriteOnly ) )
176 		{
177 			QTextStream ts( &file );
178 			ts << EditTex->toPlainText();
179 			EditTex->document()->setModified(false);
180 			file.close();
181 		}
182 	}
183 }
184