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