]> git.cworth.org Git - apitrace/commitdiff
Merge branch 'd3d10'
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 25 Sep 2011 10:05:10 +0000 (11:05 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 25 Sep 2011 10:05:10 +0000 (11:05 +0100)
14 files changed:
common/trace_parser.cpp
gui/apitrace.cpp
gui/apitrace.h
gui/apitracefilter.cpp
gui/apitracefilter.h
gui/glsledit.cpp
gui/glsledit.h
gui/imageviewer.cpp
gui/imageviewer.h
gui/mainwindow.cpp
gui/settingsdialog.cpp
gui/traceloader.cpp
gui/traceloader.h
gui/ui/settings.ui

index d7b20d2c450faaab61cc986c6c046b72df5a4caa..2eff0cda90bda893c9bbcf64e68c8c23158deff3 100644 (file)
@@ -148,6 +148,8 @@ void Parser::close(void) {
         }
     }
     bitmasks.clear();
+
+    next_call_no = 0;
 }
 
 
@@ -179,9 +181,11 @@ Call *Parser::parse_call(Mode mode) {
             std::cerr << "error: unknown event " << c << "\n";
             exit(1);
         case -1:
-            for (CallList::iterator it = calls.begin(); it != calls.end(); ++it) {
-                std::cerr << "warning: incomplete call " << (*it)->name() << "\n";
-                std::cerr << **it << "\n";
+            if (!calls.empty()) {
+                Call *call = calls.front();
+                std::cerr << call->no << ": warning: incomplete call " << call->name() << "\n";
+                calls.pop_front();
+                return call;
             }
             return NULL;
         }
index bc862097099c75c0d48ce1a093ba3aff70711866..edf98b9eb85e33985c1fb9be53151e67db2f6d51 100644 (file)
@@ -148,10 +148,12 @@ void ApiTrace::setFileName(const QString &name)
 {
     if (m_fileName != name) {
         m_fileName = name;
+        m_tempFileName = QString();
 
         m_frames.clear();
         m_errors.clear();
         m_editedCalls.clear();
+        m_queuedErrors.clear();
         m_needsSaving = false;
         emit invalidated();
 
index bf90d17daf5577a656893726579f4b3049259fe0..b73acd6fd2d08c341b16dd8c168aa2c3db955246 100644 (file)
@@ -126,7 +126,6 @@ private:
     QString m_tempFileName;
 
     QList<ApiTraceFrame*> m_frames;
-    QVector<ApiTraceCall*> m_calls;
 
     FrameMarker m_frameMarker;
 
index cfa930d74f7c8752974027350e8867be3ae2d4ac..a908325101958fb343bc4dc2d5c514e85cb48780 100644 (file)
@@ -63,6 +63,10 @@ bool ApiTraceFilter::filterAcceptsRow(int sourceRow,
             return false;
     }
 
+    if (m_filters & CustomFilter) {
+        return !function.contains(m_customRegexp);
+    }
+
 
     return true;
 }
@@ -102,4 +106,14 @@ QRegExp ApiTraceFilter::filterRegexp() const
     return m_regexp;
 }
 
+void ApiTraceFilter::setCustomFilterRegexp(const QString &str)
+{
+    m_customRegexp = QRegExp(str);
+}
+
+QString ApiTraceFilter::customFilterRegexp() const
+{
+    return m_customRegexp.pattern();
+}
+
 #include "apitracefilter.moc"
index 30c92a1287ff55794892068686d745c7d0155fcc..35f627df431f8a45f0e2647f04ef2c95447cdef9 100644 (file)
@@ -11,11 +11,12 @@ class ApiTraceFilter : public QSortFilterProxyModel
     Q_OBJECT
 public:
     enum FilterOption {
-        NullFilter        =  0,
+        NullFilter        = 0,
         ExtensionsFilter  = 1 << 0,
         ResolutionsFilter = 1 << 1,
         ErrorsQueryFilter = 1 << 2,
         ExtraStateFilter  = 1 << 3,
+        CustomFilter      = 1 << 4,
     };
     Q_DECLARE_FLAGS(FilterOptions, FilterOption)
 public:
@@ -27,6 +28,9 @@ public:
     void setFilterRegexp(const QRegExp &regexp);
     QRegExp filterRegexp() const;
 
+    void setCustomFilterRegexp(const QString &str);
+    QString customFilterRegexp() const;
+
     QModelIndex indexForCall(ApiTraceCall *call) const;
 protected:
     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
@@ -34,6 +38,7 @@ protected:
 private:
     QRegExp m_regexp;
     FilterOptions m_filters;
+    QRegExp m_customRegexp;
 };
 
 #endif
index 5c77882e65122e0b7008c327cbfe9e874fb70902..f0e461383ea733f3b391c328a336e3f20b008bb3 100644 (file)
@@ -961,4 +961,44 @@ void GLSLEdit::mark(const QString &str, Qt::CaseSensitivity sens)
     d_ptr->highlighter->mark(str, sens);
 }
 
+void GLSLEdit::indent()
+{
+    QTemporaryFile file(QLatin1String("shader.glsl"));
+    if (!file.open()) {
+        qDebug()<<"Couldn't create temporary file "<<file.fileName();
+        return;
+    }
+    file.write(toPlainText().toUtf8());
+    file.flush();
+
+    QString tempFileName =
+            QDir::toNativeSeparators(QFileInfo(file).canonicalFilePath());
+
+    QProcess astyle;
+    astyle.setStandardInputFile(tempFileName);
+    astyle.start("astyle");
+    if (!astyle.waitForStarted()) {
+        qDebug()<<"Couldn't start the 'astyle' process!";
+        return;
+    }
+
+    if (!astyle.waitForFinished()) {
+        qDebug()<<"Couldn't finish the 'astyle' process";
+        return;
+    }
+
+    QByteArray result = astyle.readAll();
+    setPlainText(QString::fromUtf8(result));
+}
+
+void GLSLEdit::contextMenuEvent(QContextMenuEvent *e)
+{
+    QMenu *menu = createStandardContextMenu();
+
+    menu->addAction(tr("Indent Code"), this, SLOT(indent()));
+
+    menu->exec(e->globalPos());
+    delete menu;
+}
+
 #include "glsledit.moc"
index e4412a26a36706121b43fa6ed850fe03d2fab775..1fc452a18e501edf6c8784dc4d6b477cb1c90d08 100644 (file)
@@ -89,10 +89,13 @@ public slots:
     void fold(int line);
     void unfold(int line);
     void toggleFold(int line);
+    void indent();
 
 protected:
-    void resizeEvent(QResizeEvent *e);
-    void wheelEvent(QWheelEvent *e);
+    virtual void resizeEvent(QResizeEvent *e);
+    virtual void wheelEvent(QWheelEvent *e);
+    virtual void contextMenuEvent(QContextMenuEvent *e);
+
 
 private slots:
     void updateCursor();
index fd5ec5d426b1a8aecac070bd81b75db85c906a77..4a11da5308d4c786d347cfc8472edc88e84115a7 100644 (file)
@@ -1,7 +1,9 @@
 #include "imageviewer.h"
 
+#include <QDesktopWidget>
 #include <QPainter>
 #include <QPixmap>
+#include <QScrollBar>
 
 ImageViewer::ImageViewer(QWidget *parent)
     : QDialog(parent)
@@ -24,8 +26,30 @@ ImageViewer::ImageViewer(QWidget *parent)
 
 void ImageViewer::setImage(const QImage &image)
 {
+    m_image = image;
     QPixmap px = QPixmap::fromImage(image);
     imageLabel->setPixmap(px);
+    updateGeometry();
+}
+
+QSize ImageViewer::sizeHint() const
+{
+    QSize size;
+
+    int vScrollWidth = scrollArea->verticalScrollBar() ?
+                scrollArea->verticalScrollBar()->width() : 0;
+    int hScrollHeight = scrollArea->horizontalScrollBar() ?
+                scrollArea->horizontalScrollBar()->height() : 0;
+    QSize optimalWindowSize(m_image.width() + vScrollWidth,
+                            m_image.height() + hScrollHeight);
+
+    QRect screenRect = QApplication::desktop()->availableGeometry();
+    const float maxPercentOfDesktopSpace = 0.8;
+    QSize maxAvailableSize(maxPercentOfDesktopSpace * screenRect.width(),
+                           maxPercentOfDesktopSpace * screenRect.height());
+
+    return QSize(qMin(optimalWindowSize.width(), maxAvailableSize.width()),
+                 qMin(optimalWindowSize.height(), maxAvailableSize.height()));
 }
 
 #include "imageviewer.moc"
index 05e8f458e94d53e11c02e0f393adc34eabbf91f0..16bc7f2ab0b5c0f6e0e10b6955b5cb5a26fc9549 100644 (file)
@@ -11,6 +11,10 @@ public:
     ImageViewer(QWidget *parent = 0);
 
     void setImage(const QImage &image);
+
+    QSize sizeHint() const;
+private:
+    QImage m_image;
 };
 
 
index 8d7af8a0a1f4a5c24041f7a511e0c1930f1c06b6..3ee8cc29aab6f68ce30e1c6eb121235b5e6c2cf1 100644 (file)
@@ -618,9 +618,6 @@ void MainWindow::showSelectedSurface()
     QImage img = var.value<QImage>();
     viewer->setImage(img);
 
-    QRect screenRect = QApplication::desktop()->availableGeometry();
-    viewer->resize(qMin(int(0.75 * screenRect.width()), img.width()) + 40,
-                   qMin(int(0.75 * screenRect.height()), img.height()) + 40);
     viewer->show();
     viewer->raise();
     viewer->activateWindow();
index e3d7864b6ae751cf5368ec8b77427f5e0371367c..c44b10740ec97d9f4e631b4acfd23ad7b27f6970 100644 (file)
@@ -38,6 +38,15 @@ void SettingsDialog::filtersFromModel(const ApiTraceFilter *model)
     functionsBox->setChecked(opts & ApiTraceFilter::ResolutionsFilter);
     errorsBox->setChecked(opts & ApiTraceFilter::ErrorsQueryFilter);
     statesBox->setChecked(opts & ApiTraceFilter::ExtraStateFilter);
+    customBox->setChecked(opts & ApiTraceFilter::CustomFilter);
+    QString customFilter = model->customFilterRegexp();
+    if (!customFilter.isEmpty()) {
+        customEdit->setText(customFilter);
+    } else {
+        //Add a common default
+        QLatin1String str("glXMakeContextCurrent");
+        customEdit->setText(str);
+    }
 
     QRegExp regexp = model->filterRegexp();
     if (regexp.isEmpty()) {
@@ -63,14 +72,22 @@ void SettingsDialog::filtersFromModel(const ApiTraceFilter *model)
 void SettingsDialog::filtersToModel(ApiTraceFilter *model)
 {
     ApiTraceFilter::FilterOptions opts = ApiTraceFilter::NullFilter;
-    if (extensionsBox->isChecked())
+    if (extensionsBox->isChecked()) {
         opts |= ApiTraceFilter::ExtensionsFilter;
-    if (functionsBox->isChecked())
+    }
+    if (functionsBox->isChecked()) {
         opts |= ApiTraceFilter::ResolutionsFilter;
-    if (errorsBox->isChecked())
+    }
+    if (errorsBox->isChecked()) {
         opts |= ApiTraceFilter::ErrorsQueryFilter;
-    if (statesBox->isChecked())
+    }
+    if (statesBox->isChecked()) {
         opts |= ApiTraceFilter::ExtraStateFilter;
+    }
+    if (customBox->isChecked()) {
+        opts |= ApiTraceFilter::CustomFilter;
+        m_filter->setCustomFilterRegexp(customEdit->text());
+    }
     m_filter->setFilterOptions(opts);
     if (showFilterBox->isChecked()) {
         m_filter->setFilterRegexp(QRegExp(showFilterEdit->text()));
@@ -92,6 +109,17 @@ void SettingsDialog::accept()
             return;
         }
     }
+    if (customBox->isChecked()) {
+        QRegExp regexp(customEdit->text());
+        if (!regexp.isValid()) {
+            QMessageBox::warning(
+                this,
+                tr("Invalid Regexp"),
+                tr("The currently set regular expression "
+                   "for custom events is invalid."));
+            return;
+        }
+    }
     filtersToModel(m_filter);
     QDialog::accept();
 }
index 0fee815ff6a811bbac9a58e9099453de6aa71fa5..cf9b37bb4f9485d292f854469e9daf3aa6733886 100644 (file)
@@ -38,6 +38,16 @@ void TraceLoader::loadTrace(const QString &filename)
         loadHelpFile();
     }
 
+    if (!m_frameBookmarks.isEmpty()) {
+        qDeleteAll(m_signatures);
+        qDeleteAll(m_enumSignatures);
+        m_signatures.clear();
+        m_enumSignatures.clear();
+        m_frameBookmarks.clear();
+        m_createdFrames.clear();
+        m_parser.close();
+    }
+
     if (!m_parser.open(filename.toLatin1())) {
         qDebug() << "error: failed to open " << filename;
         return;
@@ -51,7 +61,6 @@ void TraceLoader::loadTrace(const QString &filename)
         //Load the entire file into memory
         parseTrace();
     }
-
     emit finishedParsing();
 }
 
index 4b88ec605041527e2c9464e1aabbc9ee9cd484da..e950b0914bf73b0e81671ec1db4d58cb561d7b40 100644 (file)
@@ -85,7 +85,6 @@ private:
 
 private:
     Trace::Parser m_parser;
-    QString m_fileName;
     ApiTrace::FrameMarker m_frameMarker;
 
     typedef QMap<int, FrameBookmark> FrameBookmarks;
index 748f4d5fcd9c00fadc8468154da5f222b810accd..1d2da3e9c4dace78a2aaee5cd49d7b4e5b90bc14 100644 (file)
@@ -2,12 +2,15 @@
 <ui version="4.0">
  <class>Settings</class>
  <widget class="QDialog" name="Settings">
+  <property name="enabled">
+   <bool>true</bool>
+  </property>
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>438</width>
-    <height>333</height>
+    <width>571</width>
+    <height>334</height>
    </rect>
   </property>
   <property name="windowTitle">
      <property name="title">
       <string>Hidden Events</string>
      </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <item row="0" column="0">
-       <widget class="QCheckBox" name="extensionsBox">
-        <property name="text">
-         <string>Extension queries</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QCheckBox" name="functionsBox">
-        <property name="text">
-         <string>Function resolution</string>
-        </property>
-       </widget>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QCheckBox" name="extensionsBox">
+          <property name="text">
+           <string>Extension queries</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QCheckBox" name="functionsBox">
+          <property name="text">
+           <string>Function resolution</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
       </item>
-      <item row="1" column="0">
-       <widget class="QCheckBox" name="errorsBox">
-        <property name="text">
-         <string>Error queries</string>
-        </property>
-       </widget>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <widget class="QCheckBox" name="errorsBox">
+          <property name="text">
+           <string>Error queries</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QCheckBox" name="statesBox">
+          <property name="text">
+           <string>Extra state queries</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
       </item>
-      <item row="1" column="1">
-       <widget class="QCheckBox" name="statesBox">
-        <property name="text">
-         <string>Extra state queries</string>
-        </property>
-       </widget>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_3">
+        <item>
+         <widget class="QCheckBox" name="customBox">
+          <property name="text">
+           <string>Custom</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="customEdit">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+         </widget>
+        </item>
+       </layout>
       </item>
      </layout>
     </widget>
    <slot>accept()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
+     <x>252</x>
+     <y>329</y>
     </hint>
     <hint type="destinationlabel">
      <x>157</x>
    <slot>reject()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
+     <x>320</x>
+     <y>329</y>
     </hint>
     <hint type="destinationlabel">
      <x>286</x>
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>customBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>customEdit</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>63</x>
+     <y>151</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>107</x>
+     <y>151</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
 </ui>