| Index: debugger/QT/SkDebuggerGUI.cpp
|
| diff --git a/debugger/QT/SkDebuggerGUI.cpp b/debugger/QT/SkDebuggerGUI.cpp
|
| index 44dfb935bb79a89f441959534eb2c0002d607901..4422334496e70ef9e1848bc2d0950b646baaff69 100644
|
| --- a/debugger/QT/SkDebuggerGUI.cpp
|
| +++ b/debugger/QT/SkDebuggerGUI.cpp
|
| @@ -56,6 +56,7 @@ SkDebuggerGUI::SkDebuggerGUI(QWidget *parent) :
|
| connect(&fActionOpen, SIGNAL(triggered()), this, SLOT(openFile()));
|
| connect(&fActionDirectory, SIGNAL(triggered()), this, SLOT(toggleDirectory()));
|
| connect(&fDirectoryWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(loadFile(QListWidgetItem *)));
|
| + connect(&fDirectoryWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(populateDirectoryWidget()));
|
| connect(&fActionDelete, SIGNAL(triggered()), this, SLOT(actionDelete()));
|
| connect(&fListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(toggleBreakpoint()));
|
| connect(&fActionRewind, SIGNAL(triggered()), this, SLOT(actionRewind()));
|
| @@ -285,13 +286,19 @@ void SkDebuggerGUI::saveToFile(const SkString& filename) {
|
| }
|
|
|
| void SkDebuggerGUI::loadFile(QListWidgetItem *item) {
|
| - if (fDirectoryWidgetActive) {
|
| - fFileName = fPath.toAscii().data();
|
| - // don't add a '/' to files in the local directory
|
| - if (fFileName.size() > 0) {
|
| - fFileName.append("/");
|
| - }
|
| - fFileName.append(item->text().toAscii().data());
|
| + if (item == nullptr) {
|
| + return;
|
| + }
|
| +
|
| + SkString fileName(fPath.toAscii().data());
|
| + // don't add a '/' to files in the local directory
|
| + if (fileName.size() > 0) {
|
| + fileName.append("/");
|
| + }
|
| + fileName.append(item->text().toAscii().data());
|
| +
|
| + if (!fileName.equals(fFileName)) {
|
| + fFileName = fileName;
|
| loadPicture(fFileName);
|
| }
|
| }
|
| @@ -303,13 +310,11 @@ void SkDebuggerGUI::openFile() {
|
| }
|
|
|
| void SkDebuggerGUI::openFile(const QString &filename) {
|
| - fDirectoryWidgetActive = false;
|
| if (!filename.isEmpty()) {
|
| QFileInfo pathInfo(filename);
|
| loadPicture(SkString(filename.toAscii().data()));
|
| setupDirectoryWidget(pathInfo.path());
|
| }
|
| - fDirectoryWidgetActive = true;
|
| }
|
|
|
| void SkDebuggerGUI::pauseDrawing(bool isPaused) {
|
| @@ -580,11 +585,8 @@ void SkDebuggerGUI::setupUi(QMainWindow *SkDebuggerGUI) {
|
| fToolBar.addWidget(&fFilter);
|
| fToolBar.addAction(&fActionCancel);
|
|
|
| - // TODO(chudy): Remove static call.
|
| - fDirectoryWidgetActive = false;
|
| fFileName = "";
|
| setupDirectoryWidget("");
|
| - fDirectoryWidgetActive = true;
|
|
|
| // Menu Bar
|
| fMenuFile.setTitle("File");
|
| @@ -633,13 +635,36 @@ void SkDebuggerGUI::setupUi(QMainWindow *SkDebuggerGUI) {
|
|
|
| void SkDebuggerGUI::setupDirectoryWidget(const QString& path) {
|
| fPath = path;
|
| - QDir dir(path);
|
| + populateDirectoryWidget();
|
| +
|
| + // clear the existing watched directory and setup a new directory to watch
|
| + if (!fDirectoryWatcher.directories().empty()) {
|
| + fDirectoryWatcher.removePaths(fDirectoryWatcher.directories());
|
| + }
|
| + if (!path.isEmpty()) {
|
| + fDirectoryWatcher.addPath(fPath);
|
| + }
|
| +}
|
| +
|
| +void SkDebuggerGUI::populateDirectoryWidget() {
|
| + QDir dir(fPath);
|
| QRegExp r(".skp");
|
| - fDirectoryWidget.clear();
|
| const QStringList files = dir.entryList();
|
| +
|
| + // check if a file has been removed
|
| + for (int i = fDirectoryWidget.count() - 1; i >= 0; i--) {
|
| + QListWidgetItem* item = fDirectoryWidget.item(i);
|
| + if (!files.contains(item->text())) {
|
| + fDirectoryWidget.removeItemWidget(item);
|
| + delete item;
|
| + }
|
| + }
|
| +
|
| + // add any new files
|
| foreach (QString f, files) {
|
| - if (f.contains(r))
|
| + if (f.contains(r) && fDirectoryWidget.findItems(f, Qt::MatchExactly).size() == 0) {
|
| fDirectoryWidget.addItem(f);
|
| + }
|
| }
|
| }
|
|
|
|
|