22 #include <ktexteditor/view.h>
23 #include <ktexteditor/editorchooser.h>
24 #include <KMessageBox>
26 #include <QVBoxLayout>
28 #include <KFileDialog>
29 #include <QStackedWidget>
33 _layout =
new QVBoxLayout();
34 _editor = KTextEditor::EditorChooser::editor();
36 KMessageBox::error(
this, i18n(
"A KDE Text Editor could not be found, \n please, check your installation"));
39 _tabDocs =
new KTabBar(
this);
40 _docArea =
new QStackedWidget(
this);
41 connect(_tabDocs, SIGNAL(tabCloseRequested(
int)),
this, SLOT(closeDocument(
int)));
42 connect(_tabDocs, SIGNAL(currentChanged(
int)),
this, SLOT(changeCurrentDocument(
int)));
43 connect(_tabDocs, SIGNAL(newTabRequest()),
this, SLOT(
newScript()));
45 _tabDocs->setTabsClosable(
false);
47 _editor->setSimpleMode(
false);
49 _layout->addWidget(_tabDocs);
50 _layout->addWidget(_docArea);
52 _layout->setSpacing(0);
53 _layout->setMargin(0);
60 while (_scriptDocs.size() != 0) {
67 void CodeEditor::closeDocument(
int index)
71 if (_scriptDocs.size() >= 2) {
72 _activeDocument = _scriptDocs.at(1);
73 _activeView = _docViews.at(1);
74 _docArea->setCurrentIndex(1);
77 _activeDocument = _scriptDocs.at(index - 1);
78 _activeView = _docViews.at(index - 1);
79 _docArea->setCurrentIndex(index - 1);
80 _tabDocs->setCurrentIndex(index - 1);
84 _scriptDocs.at(index)->deleteLater();
85 _scriptDocs.removeAt(index);
87 _docArea->removeWidget(_docArea->widget(index));
88 _docViews.removeAt(index);
89 _tabDocs->removeTab(index);
93 void CodeEditor::changeCurrentDocument(
int index)
95 if (_scriptDocs.size() < index || index < 0) {
96 kDebug() <<
"Do not change to non-existing code document.";
99 _activeDocument = _scriptDocs.at(index);
100 _activeView = _docViews.at(index);
101 _docArea->setCurrentIndex(index);
102 _tabDocs->setCurrentIndex(index);
108 _scriptDocs << _editor->createDocument(0);
110 #ifdef USING_QTSCRIPT
111 _scriptDocs.last()->setMode(
"JavaScript");
114 _docViews << qobject_cast<KTextEditor::View*>(_scriptDocs.last()->createView(
this));
116 _tabDocs->addTab(_scriptDocs.last()->documentName());
117 _docArea->addWidget(_docViews.last());
118 changeCurrentDocument(_docViews.count() - 1);
119 connect(_activeDocument, SIGNAL(documentNameChanged(KTextEditor::Document*)),
this, SLOT(updateTabText(KTextEditor::Document*)));
120 connect(_activeDocument, SIGNAL(modifiedChanged(KTextEditor::Document*)),
this, SLOT(updateTabText(KTextEditor::Document*)));
122 updateTabText(_scriptDocs.last());
123 kDebug() <<
"New script created.";
125 return _scriptDocs.last();
131 KTextEditor::Document* script =
newScript();
132 script->saveAs(file);
137 void CodeEditor::updateTabText(KTextEditor::Document* text)
139 int index = _scriptDocs.indexOf(text);
140 _tabDocs->setTabText(index, text->documentName());
143 if (text->isModified()) {
144 _tabDocs->setTabIcon(index, KIcon(
"document-save"));
148 if (text->documentName().endsWith(QLatin1String(
".js"), Qt::CaseInsensitive)) {
149 _tabDocs->setTabIcon(index, KIcon(
"application-javascript"));
150 }
else if (text->documentName().endsWith(QLatin1String(
".py"), Qt::CaseInsensitive)) {
151 _tabDocs->setTabIcon(index, KIcon(
"text-x-python"));
153 _tabDocs->setTabIcon(index, KIcon(
"text-x-generic"));
160 if (!fileUrl.isValid()) {
164 KTextEditor::Document *d = _editor->createDocument(0);
167 #ifdef USING_QTSCRIPT
168 d->setMode(
"JavaScript");
171 _docViews << qobject_cast<KTextEditor::View*>(_scriptDocs.last()->createView(
this));
172 _tabDocs->addTab(_scriptDocs.last()->documentName());
173 _docArea->addWidget(_docViews.last());
175 connect(d, SIGNAL(documentNameChanged(KTextEditor::Document*)),
this, SLOT(updateTabText(KTextEditor::Document*)));
176 connect(d, SIGNAL(modifiedChanged(KTextEditor::Document*)),
this, SLOT(updateTabText(KTextEditor::Document*)));
178 changeCurrentDocument(_docViews.count() - 1);
180 kDebug() <<
"Being Called";
186 qDebug() <<
"my doc is: " << doc;
187 if ((_docViews.empty()) || (_scriptDocs.empty())) {
191 doc = _activeDocument;
193 if (doc->isModified() ==
false) {
196 if (doc->url().isEmpty()) {
205 void CodeEditor::saveScriptAs(KTextEditor::Document *doc = 0)
207 if ((_docViews.empty()) || (_scriptDocs.empty())) {
211 doc = _activeDocument;
213 doc->documentSaveAs();
221 if (_scriptDocs.empty()) {
224 foreach(KTextEditor::Document * text, _scriptDocs) {
225 if (text->url().isEmpty()) {
226 if (text->isModified() ==
false) {
251 return _activeDocument->text().toAscii();
257 bool modified =
false;
258 foreach(KTextEditor::Document * text, _scriptDocs) {
259 if (text->isModified()) modified =
true;
void saveScript(KTextEditor::Document *doc)
Save the given script or if no text document is given, the currently active script is saved...
void openScript(const KUrl &fileUrl)
bool isModified() const
This method gives modification state of code-editor texts.
KTextEditor::Document * newScript()
Creates new script.
CodeEditor(MainWindow *parent=0)
Creates new CodeEditor without any scripts.
void saveActiveScriptAs()