]> git.sven.stormbind.net Git - sven/vym.git/blob - scripteditor.cpp
e914898a9fd22b34355f6bf88da72c9e291c83b7
[sven/vym.git] / scripteditor.cpp
1 #include "scripteditor.h"
2
3 #include <QDebug> //FIXME-3 testing
4 #include <QFileDialog>
5 #include <QMessageBox>
6 #include <QTextStream>
7
8 #include "command.h"
9 #include "macros.h"
10 #include "mainwindow.h"
11 #include "options.h"
12 #include "slideitem.h"
13 #include "slidemodel.h"
14 #include "vymmodel.h"
15
16 extern QString vymName;
17 extern QList <Command*> modelCommands;
18 extern QDir lastMapDir;
19 extern Macros macros;
20 extern Main *mainWindow;
21 extern Options options;
22
23 ScriptEditor::ScriptEditor (QWidget *parent):QWidget(parent)
24 {
25     ui.setupUi (this);
26
27     //connect ( ui.openButton, SIGNAL (clicked() ), this, SLOT (openClicked() ));
28     connect ( ui.saveSlideButton, SIGNAL (clicked() ), this, SLOT (saveSlide() ));
29     //connect ( ui.saveAsButton, SIGNAL (clicked() ), this, SLOT (saveAsClicked() ));
30     connect ( ui.runButton,  SIGNAL (clicked() ), this, SLOT (runClicked() ));
31     connect ( ui.macroRunButton,  SIGNAL (clicked() ), this, SLOT (runClicked() ));
32     connect ( ui.macroLoadButton, SIGNAL (pressed()), this, SLOT (loadMacroClicked() ) );
33     connect ( ui.macroSaveButton, SIGNAL (pressed()), this, SLOT (saveMacroClicked() ) );
34
35
36     vymModelID=-1;
37
38     // Initialize Editor
39     QFont font;
40     font.setFamily("Courier");
41     font.setFixedPitch(true);
42     font.setPointSize(12);
43     ui.editor->setFont(font);
44
45     ui.modeTabWidget->setTabText(0,tr("Slide","Mode in scriptEditor"));
46     ui.modeTabWidget->setTabText(1,tr("Macro","Mode in scriptEditor"));
47
48     ui.keyCombo->insertItem(0, QString("---") );
49
50     // Init function key selection
51     for (int i=0; i<24; i++)
52     {
53         QString prefix="";
54         if (i>11) prefix="Shift +";
55         int n=i%12 + 1;
56         ui.keyCombo->insertItem(i, QString("%1 F%2").arg(prefix).arg(n) );
57     }
58     
59     highlighter = new Highlighter(ui.editor->document());
60     QStringList list;
61     foreach (Command *c, modelCommands)
62         list.append (c->getName() );
63     highlighter->addKeywords (list);
64
65     QAction *a = new QAction( tr( "Save","ScriptEditor" ), ui.editor);
66     a->setShortcut (Qt::CTRL + Qt::Key_S );      
67     a->setShortcutContext (Qt::WidgetWithChildrenShortcut);
68     addAction (a);
69     connect( a, SIGNAL( triggered() ), this, SLOT( saveSlide() ) );
70 }
71
72 void ScriptEditor::setScriptFile(const QString &fn) 
73 {
74     QFile f( fn );
75     if ( !f.open( QFile::ReadOnly|QFile::Text ) )
76     {
77         QString error (QObject::tr("Error"));
78         QString msg (QObject::tr("Couldn't open \"%1\"\n%2.").arg(fn).arg(f.errorString()));
79         if (options.isOn("batch"))
80             qWarning ()<<error+": "+msg;
81         else    
82             QMessageBox::warning(0, error,msg);
83         return;
84     }   
85
86     QTextStream in( &f );
87     ui.editor->setText (in.readAll());
88     f.close();
89 }
90
91 void ScriptEditor::saveFile()
92 {
93     QFile f( filename );
94     if ( !f.open( QIODevice::WriteOnly ) ) 
95     {
96         QMessageBox::warning(0, QObject::tr("Error"),QObject::tr("Couldn't save \"%1\"").arg(filename));
97         return;
98     }
99
100     QTextStream t( &f );
101     t.setCodec("UTF-8");
102     t << ui.editor->toPlainText();
103     f.close();
104 }
105
106 void ScriptEditor::saveSlide()
107 {
108     VymModel *vm=mainWindow->getModel(vymModelID);
109     if (!vm)
110     {
111         QMessageBox::warning(0,tr("Warning"),tr("Couldn't get model to save script into slide!"));
112         return;
113     }
114     SlideItem *si=vm->getSlideModel()->findSlideID(slideID);
115     if (!si)
116     {
117         QMessageBox::warning(0,tr("Warning"),tr("Couldn't find slide to save script into slide!"));
118         return;
119     }
120     si->setInScript(ui.editor->toPlainText());
121 }
122
123 void ScriptEditor::setSlideScript(uint model_id, uint slide_id,const QString &s)
124 {
125     vymModelID=model_id;
126     slideID=slide_id;
127     mode=Slide;
128     ui.editor->setText(s);
129 }
130
131 void ScriptEditor::saveClicked()
132 {
133     if (filename.isEmpty() )
134         saveAsClicked();
135     else
136         saveFile();
137 }
138
139 void ScriptEditor::saveAsClicked()
140 {
141     QString fn = QFileDialog::getSaveFileName( 
142         this, 
143         QString (vymName + " - " +tr("Save script")),
144         QString (),
145         "VYM script (*.vys);;All files (*)",
146         0,
147         QFileDialog::DontConfirmOverwrite);
148         
149     if ( !fn.isEmpty() ) 
150     {
151         QFile file (fn);
152         if (file.exists())
153         {
154             QMessageBox mb( vymName,
155                 tr("The file %1\nexists already.\nDo you want to overwrite it?","dialog 'save as'").arg(fn),
156             QMessageBox::Warning,
157             QMessageBox::Yes | QMessageBox::Default,
158             QMessageBox::Cancel | QMessageBox::Escape,
159             Qt::NoButton );
160             mb.setButtonText( QMessageBox::Yes, tr("Overwrite") );
161             mb.setButtonText( QMessageBox::No, tr("Cancel"));
162             switch( mb.exec() ) 
163             {
164                 case QMessageBox::Yes:
165                     // save 
166                     filename = fn;
167                     saveFile();
168                     return;
169                 case QMessageBox::Cancel:
170                     // do nothing
171                     return;
172             }
173         } 
174         filename=fn;
175         saveFile();
176     }
177 }
178
179 void ScriptEditor::openClicked()
180 {
181     QString filter("VYM scripts (*.vys);;All (*)");
182     QString fn=QFileDialog::getOpenFileName( 
183         this,
184         vymName+" - " + tr("Load script"), 
185         lastMapDir.path(), 
186         filter);
187
188     if (!fn.isEmpty() )
189     {
190         QFile f( fn);
191         if ( !f.open( QIODevice::ReadOnly ) )
192         {
193             QMessageBox::warning(0, 
194                 tr("Error"),
195                 tr("Couldn't open %1.\n").arg(filename));
196             return;
197         }   
198
199         QTextStream ts( &f );
200     ts.setCodec("UTF-8");
201     ui.editor->setText( ts.readAll() );
202         f.close();
203         lastMapDir.setPath(fn.left(fn.lastIndexOf ("/")) );
204     }
205 }
206
207 void ScriptEditor::runClicked()
208 {
209     emit runScript (ui.editor->toPlainText() );
210 }
211
212 void ScriptEditor::loadMacroClicked()
213 {
214     QString m=macros.getMacro (ui.keyCombo->currentIndex()+1);
215     if (!m.isEmpty())
216     ui.editor->setText (m);
217 }
218 void ScriptEditor::saveMacroClicked()
219 {
220     filename=macros.getPath(ui.keyCombo->currentIndex());
221     saveFile();
222 }