Added more features to deletes and breakpoints

Review URL: https://codereview.appspot.com/6406050

git-svn-id: http://skia.googlecode.com/svn/trunk@4637 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/debugger/QT/SkDebuggerGUI.cpp b/debugger/QT/SkDebuggerGUI.cpp
index 1c5b48c..ea9d687 100644
--- a/debugger/QT/SkDebuggerGUI.cpp
+++ b/debugger/QT/SkDebuggerGUI.cpp
@@ -14,6 +14,7 @@
     , fActionOpen(this)
     , fActionBreakpoint(this)
     , fActionCancel(this)
+    , fActionClearBreakpoints(this)
     , fActionClearDeletes(this)
     , fActionClose(this)
     , fActionCreateBreakpoint(this)
@@ -23,8 +24,8 @@
     , fActionInspector(this)
     , fActionPlay(this)
     , fActionPause(this)
-    , fActionReload(this)
     , fActionRewind(this)
+    , fActionShowDeletes(this)
     , fActionStepBack(this)
     , fActionStepForward(this)
     , fCentralWidget(this)
@@ -40,6 +41,9 @@
     , fMenuNavigate(this)
     , fMenuView(this)
     , fToolBar(this)
+    , fBreakpointsActivated(false)
+    , fDeletesActivated(false)
+    , fPause(false)
 {
     setupUi(this);
     connect(&fListWidget, SIGNAL(currentItemChanged(QListWidgetItem*,
@@ -52,7 +56,6 @@
                     QListWidgetItem*)), this,
             SLOT(loadFile(QListWidgetItem *)));
     connect(&fActionDelete, SIGNAL(triggered()), this, SLOT(actionDelete()));
-    connect(&fActionReload, SIGNAL(triggered()), this, SLOT(actionReload()));
     connect(&fListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this,
             SLOT(toggleBreakpoint()));
     connect(&fActionRewind, SIGNAL(triggered()), this, SLOT(actionRewind()));
@@ -69,6 +72,8 @@
     connect(&fFilter, SIGNAL(activated(QString)), this,
             SLOT(toggleFilter(QString)));
     connect(&fActionCancel, SIGNAL(triggered()), this, SLOT(actionCancel()));
+    connect(&fActionClearBreakpoints, SIGNAL(triggered()), this, SLOT(actionClearBreakpoints()));
+    connect(&fActionClearDeletes, SIGNAL(triggered()), this, SLOT(actionClearDeletes()));
     connect(&fActionClose, SIGNAL(triggered()), this, SLOT(actionClose()));
     connect(fSettingsWidget.getVisibilityButton(), SIGNAL(toggled(bool)), this,
             SLOT(actionCommandFilter()));
@@ -82,26 +87,29 @@
     connect(&fCanvasWidget, SIGNAL(hitChanged(int)), &fSettingsWidget,
             SLOT(updateHit(int)));
     connect(&fActionCreateBreakpoint, SIGNAL(activated()), this, SLOT(toggleBreakpoint()));
+    connect(&fActionShowDeletes, SIGNAL(triggered()), this, SLOT(showDeletes()));
+
+    fInspectorWidget.setDisabled(true);
+    fMenuBar.setDisabled(true);
 }
 
 SkDebuggerGUI::~SkDebuggerGUI() {
 }
 
 void SkDebuggerGUI::actionBreakpoints() {
-    if (!fBreakpointsActivated) {
-        fBreakpointsActivated = true;
-    } else {
-        fBreakpointsActivated = false;
-    }
-
+    fBreakpointsActivated = !fBreakpointsActivated;
     for (int row = 0; row < fListWidget.count(); row++) {
         QListWidgetItem *item = fListWidget.item(row);
+        item->setHidden(item->checkState() == Qt::Unchecked && fBreakpointsActivated);
+    }
+}
 
-        if (item->checkState() == Qt::Unchecked && fBreakpointsActivated) {
-            item->setHidden(true);
-        } else {
-            item->setHidden(false);
-        }
+void SkDebuggerGUI::showDeletes() {
+    fDeletesActivated = !fDeletesActivated;
+    for (int row = 0; row < fListWidget.count(); row++) {
+        QListWidgetItem *item = fListWidget.item(row);
+        bool isVisible = fCanvasWidget.commandIsVisibleAtIndex(row);
+        item->setHidden(isVisible && fDeletesActivated);
     }
 }
 
@@ -111,6 +119,28 @@
     }
 }
 
+void SkDebuggerGUI::actionClearBreakpoints() {
+    for (int row = 0; row < fListWidget.count(); row++) {
+        QListWidgetItem* item = fListWidget.item(row);
+        item->setCheckState(Qt::Unchecked);
+        item->setData(Qt::DecorationRole,
+                QPixmap(":/images/Icons/blank.png"));
+    }
+}
+
+void SkDebuggerGUI::actionClearDeletes() {
+    for (int row = 0; row < fListWidget.count(); row++) {
+        QListWidgetItem* item = fListWidget.item(row);
+        item->setData(Qt::UserRole + 2, QPixmap(":/images/Icons/blank.png"));
+        fCanvasWidget.setCommandVisibliltyAtIndex(row, true);
+    }
+    if (fPause) {
+        fCanvasWidget.drawTo(fPausedRow);
+    } else {
+        fCanvasWidget.drawTo(fListWidget.currentRow());
+    }
+}
+
 void SkDebuggerGUI::actionCommandFilter() {
     fCanvasWidget.toggleCurrentCommandFilter(
             fSettingsWidget.getVisibilityButton()->isChecked());
@@ -122,16 +152,17 @@
 }
 
 void SkDebuggerGUI::actionDelete() {
-    QListWidgetItem* item = fListWidget.currentItem();
-    if (item->data(Qt::UserRole + 2) == true) {
-        item->setData(Qt::UserRole + 2, false);
-        item->setData(Qt::UserRole + 3, QPixmap(":/images/Icons/delete.png"));
-    } else {
-        item->setData(Qt::UserRole + 2, true);
-        item->setData(Qt::UserRole + 3, QPixmap(":/images/Icons/blank.png"));
-    }
     int currentRow = fListWidget.currentRow();
-    fCanvasWidget.toggleCommand(currentRow);
+    QListWidgetItem* item = fListWidget.currentItem();
+
+    if (fCanvasWidget.commandIsVisibleAtIndex(currentRow)) {
+        item->setData(Qt::UserRole + 2, QPixmap(":/images/Icons/delete.png"));
+        fCanvasWidget.setCommandVisibliltyAtIndex(currentRow, false);
+    } else {
+        item->setData(Qt::UserRole + 2, QPixmap(":/images/Icons/blank.png"));
+        fCanvasWidget.setCommandVisibliltyAtIndex(currentRow, true);
+    }
+
     if (fPause) {
         fCanvasWidget.drawTo(fPausedRow);
     } else {
@@ -159,16 +190,6 @@
     fListWidget.setCurrentRow(fListWidget.count() - 1);
 }
 
-void SkDebuggerGUI::actionReload() {
-    for (int row = 0; row < fListWidget.count(); row++) {
-        QListWidgetItem* item = fListWidget.item(row);
-        item->setData(Qt::UserRole + 2, true);
-        item->setData(Qt::DecorationRole, QPixmap(":/images/Icons/blank.png"));
-        fCanvasWidget.toggleCommand(row, true);
-    }
-    fCanvasWidget.drawTo(fListWidget.currentRow());
-}
-
 void SkDebuggerGUI::actionRewind() {
     fListWidget.setCurrentRow(0);
 }
@@ -316,7 +337,7 @@
             QSize(), QIcon::Normal, QIcon::Off);
     fActionBreakpoint.setShortcut(QKeySequence(tr("Ctrl+B")));
     fActionBreakpoint.setIcon(breakpoint);
-    fActionBreakpoint.setText("Show Breakpoints");
+    fActionBreakpoint.setText("Breakpoints");
 
     QIcon cancel;
     cancel.addFile(QString::fromUtf8(":/images/Ico/reload.png"), QSize(),
@@ -324,6 +345,12 @@
     fActionCancel.setIcon(cancel);
     fActionCancel.setText("Clear Filter");
 
+    fActionClearBreakpoints.setShortcut(QKeySequence(tr("Alt+B")));
+    fActionClearBreakpoints.setText("Clear Breakpoints");
+
+    fActionClearDeletes.setShortcut(QKeySequence(tr("Alt+X")));
+    fActionClearDeletes.setText("Clear Deletes");
+
     fActionClose.setShortcuts(QKeySequence::Quit);
     fActionClose.setText("Exit");
 
@@ -358,8 +385,6 @@
     fActionPause.setIcon(pause);
     fActionPause.setText("Pause");
 
-    fActionReload.setText("Reset Picture");
-
     QIcon rewind;
     rewind.addFile(QString::fromUtf8(":/images/Ico/rewind.png"), QSize(),
             QIcon::Normal, QIcon::Off);
@@ -367,6 +392,9 @@
     fActionRewind.setIcon(rewind);
     fActionRewind.setText("Rewind");
 
+    fActionShowDeletes.setShortcut(QKeySequence(tr("Ctrl+X")));
+    fActionShowDeletes.setText("Deleted Commands");
+
     QIcon stepBack;
     stepBack.addFile(QString::fromUtf8(":/images/Ico/previous.png"), QSize(),
             QIcon::Normal, QIcon::Off);
@@ -453,7 +481,10 @@
 
     fMenuEdit.setTitle("Edit");
     fMenuEdit.addAction(&fActionDelete);
+    fMenuEdit.addAction(&fActionClearDeletes);
+    fMenuEdit.addSeparator();
     fMenuEdit.addAction(&fActionCreateBreakpoint);
+    fMenuEdit.addAction(&fActionClearBreakpoints);
 
     fMenuNavigate.setTitle("Navigate");
     fMenuNavigate.addAction(&fActionRewind);
@@ -465,6 +496,7 @@
 
     fMenuView.setTitle("View");
     fMenuView.addAction(&fActionBreakpoint);
+    fMenuView.addAction(&fActionShowDeletes);
 
     fMenuWindows.setTitle("Window");
     fMenuWindows.addAction(&fActionInspector);
@@ -504,7 +536,9 @@
             fSettingsWidget.getVisibilityButton()->isChecked());
     setupListWidget(cv);
     setupComboBox(cv);
+    fInspectorWidget.setDisabled(false);
     fSettingsWidget.setDisabled(false);
+    fMenuBar.setDisabled(false);
 }
 
 void SkDebuggerGUI::setupListWidget(std::vector<std::string>* cv) {
@@ -514,7 +548,6 @@
         QListWidgetItem *item = new QListWidgetItem();
         item->setData(Qt::DisplayRole, (*cv)[i].c_str());
         item->setData(Qt::UserRole + 1, counter++);
-        item->setData(Qt::UserRole + 2, true);
         fListWidget.addItem(item);
     }
 }