diff options
Diffstat (limited to 'utils/themeeditor/editorwindow.cpp')
-rw-r--r-- | utils/themeeditor/editorwindow.cpp | 94 |
1 files changed, 80 insertions, 14 deletions
diff --git a/utils/themeeditor/editorwindow.cpp b/utils/themeeditor/editorwindow.cpp index 93cf3641f0..3603b24af1 100644 --- a/utils/themeeditor/editorwindow.cpp +++ b/utils/themeeditor/editorwindow.cpp | |||
@@ -40,14 +40,14 @@ EditorWindow::EditorWindow(QWidget *parent) : | |||
40 | setupMenus(); | 40 | setupMenus(); |
41 | } | 41 | } |
42 | 42 | ||
43 | void EditorWindow::loadTabFromFile(QString fileName) | 43 | void EditorWindow::loadTabFromSkinFile(QString fileName) |
44 | { | 44 | { |
45 | /* Checking to see if the file is already open */ | 45 | /* Checking to see if the file is already open */ |
46 | for(int i = 0; i < ui->editorTabs->count(); i++) | 46 | for(int i = 0; i < ui->editorTabs->count(); i++) |
47 | { | 47 | { |
48 | SkinDocument* current = dynamic_cast<SkinDocument*> | 48 | TabContent* current = dynamic_cast<TabContent*> |
49 | (ui->editorTabs->widget(i)); | 49 | (ui->editorTabs->widget(i)); |
50 | if(current->getFile() == fileName) | 50 | if(current->file() == fileName) |
51 | { | 51 | { |
52 | ui->editorTabs->setCurrentIndex(i); | 52 | ui->editorTabs->setCurrentIndex(i); |
53 | return; | 53 | return; |
@@ -61,6 +61,27 @@ void EditorWindow::loadTabFromFile(QString fileName) | |||
61 | 61 | ||
62 | } | 62 | } |
63 | 63 | ||
64 | void EditorWindow::loadConfigTab(ConfigDocument* doc) | ||
65 | { | ||
66 | for(int i = 0; i < ui->editorTabs->count(); i++) | ||
67 | { | ||
68 | TabContent* current = dynamic_cast<TabContent*> | ||
69 | (ui->editorTabs->widget(i)); | ||
70 | if(current->file() == doc->file()) | ||
71 | { | ||
72 | ui->editorTabs->setCurrentIndex(i); | ||
73 | doc->deleteLater(); | ||
74 | return; | ||
75 | } | ||
76 | } | ||
77 | |||
78 | addTab(doc); | ||
79 | ui->editorTabs->setCurrentWidget(doc); | ||
80 | |||
81 | QObject::connect(doc, SIGNAL(titleChanged(QString)), | ||
82 | this, SLOT(tabTitleChanged(QString))); | ||
83 | } | ||
84 | |||
64 | void EditorWindow::loadSettings() | 85 | void EditorWindow::loadSettings() |
65 | { | 86 | { |
66 | 87 | ||
@@ -153,16 +174,19 @@ void EditorWindow::setupMenus() | |||
153 | this, SLOT(openProject())); | 174 | this, SLOT(openProject())); |
154 | } | 175 | } |
155 | 176 | ||
156 | void EditorWindow::addTab(SkinDocument *doc) | 177 | void EditorWindow::addTab(TabContent *doc) |
157 | { | 178 | { |
158 | ui->editorTabs->addTab(doc, doc->getTitle()); | 179 | ui->editorTabs->addTab(doc, doc->title()); |
159 | 180 | ||
160 | /* Connecting to title change events */ | 181 | /* Connecting to title change events */ |
161 | QObject::connect(doc, SIGNAL(titleChanged(QString)), | 182 | QObject::connect(doc, SIGNAL(titleChanged(QString)), |
162 | this, SLOT(tabTitleChanged(QString))); | 183 | this, SLOT(tabTitleChanged(QString))); |
184 | QObject::connect(doc, SIGNAL(lineChanged(int)), | ||
185 | this, SLOT(lineChanged(int))); | ||
163 | 186 | ||
164 | /* Connecting to settings change events */ | 187 | /* Connecting to settings change events */ |
165 | doc->connectPrefs(prefs); | 188 | if(doc->type() == TabContent::Skin) |
189 | dynamic_cast<SkinDocument*>(doc)->connectPrefs(prefs); | ||
166 | } | 190 | } |
167 | 191 | ||
168 | 192 | ||
@@ -175,7 +199,9 @@ void EditorWindow::newTab() | |||
175 | 199 | ||
176 | void EditorWindow::shiftTab(int index) | 200 | void EditorWindow::shiftTab(int index) |
177 | { | 201 | { |
178 | if(index < 0) | 202 | TabContent* widget = dynamic_cast<TabContent*> |
203 | (ui->editorTabs->currentWidget()); | ||
204 | if(index < 0 || widget->type() != TabContent::Skin) | ||
179 | { | 205 | { |
180 | ui->parseTree->setModel(0); | 206 | ui->parseTree->setModel(0); |
181 | ui->actionSave_Document->setEnabled(false); | 207 | ui->actionSave_Document->setEnabled(false); |
@@ -187,8 +213,7 @@ void EditorWindow::shiftTab(int index) | |||
187 | else | 213 | else |
188 | { | 214 | { |
189 | /* Syncing the tree view and the status bar */ | 215 | /* Syncing the tree view and the status bar */ |
190 | SkinDocument* doc = dynamic_cast<SkinDocument*> | 216 | SkinDocument* doc = dynamic_cast<SkinDocument*>(widget); |
191 | (ui->editorTabs->currentWidget()); | ||
192 | ui->parseTree->setModel(doc->getModel()); | 217 | ui->parseTree->setModel(doc->getModel()); |
193 | parseStatus->setText(doc->getStatus()); | 218 | parseStatus->setText(doc->getStatus()); |
194 | 219 | ||
@@ -197,12 +222,15 @@ void EditorWindow::shiftTab(int index) | |||
197 | ui->actionClose_Document->setEnabled(true); | 222 | ui->actionClose_Document->setEnabled(true); |
198 | ui->actionToolbarSave->setEnabled(true); | 223 | ui->actionToolbarSave->setEnabled(true); |
199 | ui->fromTree->setEnabled(true); | 224 | ui->fromTree->setEnabled(true); |
225 | |||
226 | sizeColumns(); | ||
227 | |||
200 | } | 228 | } |
201 | } | 229 | } |
202 | 230 | ||
203 | bool EditorWindow::closeTab(int index) | 231 | bool EditorWindow::closeTab(int index) |
204 | { | 232 | { |
205 | SkinDocument* widget = dynamic_cast<SkinDocument*> | 233 | TabContent* widget = dynamic_cast<TabContent*> |
206 | (ui->editorTabs->widget(index)); | 234 | (ui->editorTabs->widget(index)); |
207 | if(widget->requestClose()) | 235 | if(widget->requestClose()) |
208 | { | 236 | { |
@@ -222,13 +250,13 @@ void EditorWindow::closeCurrent() | |||
222 | void EditorWindow::saveCurrent() | 250 | void EditorWindow::saveCurrent() |
223 | { | 251 | { |
224 | if(ui->editorTabs->currentIndex() >= 0) | 252 | if(ui->editorTabs->currentIndex() >= 0) |
225 | dynamic_cast<SkinDocument*>(ui->editorTabs->currentWidget())->save(); | 253 | dynamic_cast<TabContent*>(ui->editorTabs->currentWidget())->save(); |
226 | } | 254 | } |
227 | 255 | ||
228 | void EditorWindow::saveCurrentAs() | 256 | void EditorWindow::saveCurrentAs() |
229 | { | 257 | { |
230 | if(ui->editorTabs->currentIndex() >= 0) | 258 | if(ui->editorTabs->currentIndex() >= 0) |
231 | dynamic_cast<SkinDocument*>(ui->editorTabs->currentWidget())->saveAs(); | 259 | dynamic_cast<TabContent*>(ui->editorTabs->currentWidget())->saveAs(); |
232 | } | 260 | } |
233 | 261 | ||
234 | void EditorWindow::openFile() | 262 | void EditorWindow::openFile() |
@@ -248,7 +276,7 @@ void EditorWindow::openFile() | |||
248 | 276 | ||
249 | QString current = fileNames[i]; | 277 | QString current = fileNames[i]; |
250 | 278 | ||
251 | loadTabFromFile(current); | 279 | loadTabFromSkinFile(current); |
252 | 280 | ||
253 | /* And setting the new default directory */ | 281 | /* And setting the new default directory */ |
254 | current.chop(current.length() - current.lastIndexOf('/') - 1); | 282 | current.chop(current.length() - current.lastIndexOf('/') - 1); |
@@ -292,7 +320,7 @@ void EditorWindow::openProject() | |||
292 | 320 | ||
293 | void EditorWindow::tabTitleChanged(QString title) | 321 | void EditorWindow::tabTitleChanged(QString title) |
294 | { | 322 | { |
295 | SkinDocument* sender = dynamic_cast<SkinDocument*>(QObject::sender()); | 323 | TabContent* sender = dynamic_cast<TabContent*>(QObject::sender()); |
296 | ui->editorTabs->setTabText(ui->editorTabs->indexOf(sender), title); | 324 | ui->editorTabs->setTabText(ui->editorTabs->indexOf(sender), title); |
297 | } | 325 | } |
298 | 326 | ||
@@ -334,6 +362,44 @@ void EditorWindow::updateCurrent() | |||
334 | (ui->editorTabs->currentWidget())->genCode(); | 362 | (ui->editorTabs->currentWidget())->genCode(); |
335 | } | 363 | } |
336 | 364 | ||
365 | void EditorWindow::lineChanged(int line) | ||
366 | { | ||
367 | ui->parseTree->collapseAll(); | ||
368 | ParseTreeModel* model = dynamic_cast<ParseTreeModel*> | ||
369 | (ui->parseTree->model()); | ||
370 | expandLine(model, QModelIndex(), line); | ||
371 | sizeColumns(); | ||
372 | |||
373 | } | ||
374 | |||
375 | void EditorWindow::expandLine(ParseTreeModel* model, QModelIndex parent, | ||
376 | int line) | ||
377 | { | ||
378 | for(int i = 0; i < model->rowCount(parent); i++) | ||
379 | { | ||
380 | QModelIndex data = model->index(i, ParseTreeModel::lineColumn, parent); | ||
381 | QModelIndex recurse = model->index(i, 0, parent); | ||
382 | |||
383 | expandLine(model, recurse, line); | ||
384 | |||
385 | if(model->data(data, Qt::DisplayRole) == line) | ||
386 | { | ||
387 | ui->parseTree->expand(parent); | ||
388 | ui->parseTree->expand(data); | ||
389 | ui->parseTree->scrollTo(parent, QAbstractItemView::PositionAtTop); | ||
390 | } | ||
391 | |||
392 | } | ||
393 | } | ||
394 | |||
395 | void EditorWindow::sizeColumns() | ||
396 | { | ||
397 | /* Setting the column widths */ | ||
398 | ui->parseTree->resizeColumnToContents(ParseTreeModel::lineColumn); | ||
399 | ui->parseTree->resizeColumnToContents(ParseTreeModel::typeColumn); | ||
400 | ui->parseTree->resizeColumnToContents(ParseTreeModel::valueColumn); | ||
401 | } | ||
402 | |||
337 | EditorWindow::~EditorWindow() | 403 | EditorWindow::~EditorWindow() |
338 | { | 404 | { |
339 | delete ui; | 405 | delete ui; |