[haiku-commits] r34640 - in haiku/trunk/src/apps/debuganalyzer/gui: . main_window thread_window

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 12 Dec 2009 13:31:25 +0100 (CET)

Author: bonefish
Date: 2009-12-12 13:31:24 +0100 (Sat, 12 Dec 2009)
New Revision: 34640
Changeset: http://dev.haiku-os.org/changeset/34640/haiku

Added:
   haiku/trunk/src/apps/debuganalyzer/gui/AbstractWaitObjectsPage.h
Modified:
   haiku/trunk/src/apps/debuganalyzer/gui/main_window/WaitObjectsPage.cpp
   haiku/trunk/src/apps/debuganalyzer/gui/main_window/WaitObjectsPage.h
   haiku/trunk/src/apps/debuganalyzer/gui/thread_window/WaitObjectsPage.cpp
   haiku/trunk/src/apps/debuganalyzer/gui/thread_window/WaitObjectsPage.h
Log:
* Moved the ThreadWindow::WaitObjectPage implementation to new class
  AbstractWaitObjectsPage and templatized it over model, wait object group,
  and wait object type.
* Replaced the previous MainWindow::WaitObjectPage implementation using
  AbstractWaitObjectsPage.


Added: haiku/trunk/src/apps/debuganalyzer/gui/AbstractWaitObjectsPage.h
===================================================================
--- haiku/trunk/src/apps/debuganalyzer/gui/AbstractWaitObjectsPage.h            
                (rev 0)
+++ haiku/trunk/src/apps/debuganalyzer/gui/AbstractWaitObjectsPage.h    
2009-12-12 12:31:24 UTC (rev 34640)
@@ -0,0 +1,339 @@
+/*
+ * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx
+ * Distributed under the terms of the MIT License.
+ */
+#ifndef ABSTRACT_WAIT_OBJECTS_PAGE_H
+#define ABSTRACT_WAIT_OBJECTS_PAGE_H
+
+
+#include <stdio.h>
+
+#include <new>
+
+#include <GroupView.h>
+
+#include "table/TableColumns.h"
+#include "table/TreeTable.h"
+
+
+#define ABSTRACT_WAIT_OBJECTS_PAGE_TEMPLATE                                    
        \
+       template<typename ModelType, typename WaitObjectGroupType,      \
+               typename WaitObjectType>
+#define ABSTRACT_WAIT_OBJECTS_PAGE_CLASS       \
+       AbstractWaitObjectsPage<ModelType, WaitObjectGroupType, WaitObjectType>
+
+
+ABSTRACT_WAIT_OBJECTS_PAGE_TEMPLATE
+class AbstractWaitObjectsPage : public BGroupView, protected TreeTableListener 
{
+public:
+                                                               
AbstractWaitObjectsPage();
+       virtual                                         
~AbstractWaitObjectsPage();
+
+                       void                            SetModel(ModelType* 
model);
+
+protected:
+                       class WaitObjectsTreeModel;
+
+protected:
+                       TreeTable*                      fWaitObjectsTree;
+                       WaitObjectsTreeModel* fWaitObjectsTreeModel;
+                       ModelType*                      fModel;
+};
+
+
+// #pragma mark - WaitObjectsTreeModel
+
+
+ABSTRACT_WAIT_OBJECTS_PAGE_TEMPLATE
+class ABSTRACT_WAIT_OBJECTS_PAGE_CLASS::WaitObjectsTreeModel
+       : public TreeTableModel {
+public:
+       WaitObjectsTreeModel(ModelType* model)
+               :
+               fModel(model),
+               fRootNode(NULL)
+       {
+               fRootNode = new RootNode(fModel);
+       }
+
+       ~WaitObjectsTreeModel()
+       {
+               delete fRootNode;
+       }
+
+       virtual void* Root() const
+       {
+               return fRootNode;
+       }
+
+       virtual int32 CountChildren(void* parent) const
+       {
+               return ((Node*)parent)->CountChildren();
+       }
+
+       virtual void* ChildAt(void* parent, int32 index) const
+       {
+               return ((Node*)parent)->ChildAt(index);
+       }
+
+       virtual int32 CountColumns() const
+       {
+               return 6;
+       }
+
+       virtual bool GetValueAt(void* object, int32 columnIndex, BVariant& 
value)
+       {
+               return ((Node*)object)->GetValueAt(columnIndex, value);
+       }
+
+private:
+       struct Node {
+               virtual ~Node() {}
+
+               virtual int32 CountChildren() const = 0;
+               virtual void* ChildAt(int32 index) const = 0;
+               virtual bool GetValueAt(int32 columnIndex, BVariant& value) = 0;
+       };
+
+       struct ObjectNode : Node {
+               WaitObjectType* object;
+
+               ObjectNode(WaitObjectType* object)
+                       :
+                       object(object)
+               {
+               }
+
+               virtual int32 CountChildren() const
+               {
+                       return 0;
+               }
+
+               virtual void* ChildAt(int32 index) const
+               {
+                       return NULL;
+               }
+
+               virtual bool GetValueAt(int32 columnIndex, BVariant& value)
+               {
+                       return _GetWaitObjectValueAt(object, columnIndex, 
value);
+               }
+       };
+
+       // For GCC 2
+       friend struct ObjectNode;
+
+       struct GroupNode : Node {
+               WaitObjectGroupType*    group;
+               BObjectList<ObjectNode> objectNodes;
+
+               GroupNode(WaitObjectGroupType* group)
+                       :
+                       group(group)
+               {
+                       int32 count = group->CountWaitObjects();
+                       for (int32 i = 0; i < count; i++) {
+                               WaitObjectType* waitObject = 
group->WaitObjectAt(i);
+                               if (!objectNodes.AddItem(new 
ObjectNode(waitObject)))
+                                       throw std::bad_alloc();
+                       }
+               }
+
+               virtual int32 CountChildren() const
+               {
+                       return objectNodes.CountItems();
+               }
+
+               virtual void* ChildAt(int32 index) const
+               {
+                       return objectNodes.ItemAt(index);
+               }
+
+               virtual bool GetValueAt(int32 columnIndex, BVariant& value)
+               {
+                       if (columnIndex <= 2) {
+                               return 
_GetWaitObjectValueAt(group->WaitObjectAt(0),
+                                       columnIndex, value);
+                       }
+
+                       switch (columnIndex) {
+                               case 4:
+                                       value.SetTo(group->Waits());
+                                       return true;
+                               case 5:
+                                       value.SetTo(group->TotalWaitTime());
+                                       return true;
+                               default:
+                                       return false;
+                       }
+               }
+       };
+
+       // For GCC 2
+       friend struct GroupNode;
+
+       struct RootNode : Node {
+               ModelType*                      model;
+               BObjectList<Node>       groupNodes;
+
+               RootNode(ModelType* model)
+                       :
+                       model(model),
+                       groupNodes(20, true)
+               {
+                       int32 count = model->CountWaitObjectGroups();
+                       for (int32 i = 0; i < count; i++) {
+                               WaitObjectGroupType* group = 
model->WaitObjectGroupAt(i);
+                               if 
(!groupNodes.AddItem(_CreateGroupNode(group)))
+                                       throw std::bad_alloc();
+                       }
+               }
+
+               virtual int32 CountChildren() const
+               {
+                       return groupNodes.CountItems();
+               }
+
+               virtual void* ChildAt(int32 index) const
+               {
+                       return groupNodes.ItemAt(index);
+               }
+
+               virtual bool GetValueAt(int32 columnIndex, BVariant& value)
+               {
+                       return false;
+               }
+
+       private:
+               static Node* _CreateGroupNode(WaitObjectGroupType* group)
+               {
+                       // If the group has only one object, just create an 
object node.
+                       if (group->CountWaitObjects() == 1)
+                               return new ObjectNode(group->WaitObjectAt(0));
+
+                       return new GroupNode(group);
+               }
+
+       };
+
+private:
+       static bool _GetWaitObjectValueAt(WaitObjectType* waitObject,
+               int32 columnIndex, BVariant& value)
+       {
+               switch (columnIndex) {
+                       case 0:
+                               
value.SetTo(wait_object_type_name(waitObject->Type()),
+                                       B_VARIANT_DONT_COPY_DATA);
+                               return true;
+                       case 1:
+                               value.SetTo(waitObject->Name(), 
B_VARIANT_DONT_COPY_DATA);
+                               return true;
+                       case 2:
+                       {
+                               if (waitObject->Object() == 0)
+                                       return false;
+
+                               char buffer[16];
+                               snprintf(buffer, sizeof(buffer), "%#lx",
+                                       waitObject->Object());
+                               value.SetTo(buffer);
+                               return true;
+                       }
+                       case 3:
+                       {
+                               if (waitObject->ReferencedObject() == 0)
+                                       return false;
+
+                               char buffer[16];
+                               snprintf(buffer, sizeof(buffer), "%#lx",
+                                       waitObject->ReferencedObject());
+                               value.SetTo(buffer);
+                               return true;
+                       }
+                       case 4:
+                               value.SetTo(waitObject->Waits());
+                               return true;
+                       case 5:
+                               value.SetTo(waitObject->TotalWaitTime());
+                               return true;
+                       default:
+                               return false;
+               }
+       }
+
+private:
+       ModelType*      fModel;
+       RootNode*       fRootNode;
+};
+
+
+// #pragma mark - WaitObjectsPage
+
+
+ABSTRACT_WAIT_OBJECTS_PAGE_TEMPLATE
+ABSTRACT_WAIT_OBJECTS_PAGE_CLASS::AbstractWaitObjectsPage()
+       :
+       BGroupView(B_VERTICAL),
+       fWaitObjectsTree(NULL),
+       fWaitObjectsTreeModel(NULL),
+       fModel(NULL)
+
+{
+       SetName("Wait Objects");
+
+       fWaitObjectsTree = new TreeTable("wait object list", 0);
+       AddChild(fWaitObjectsTree->ToView());
+
+       fWaitObjectsTree->AddColumn(new StringTableColumn(0, "Type", 80, 40, 
1000,
+               B_TRUNCATE_END, B_ALIGN_LEFT));
+       fWaitObjectsTree->AddColumn(new StringTableColumn(1, "Name", 80, 40, 
1000,
+               B_TRUNCATE_END, B_ALIGN_LEFT));
+       fWaitObjectsTree->AddColumn(new StringTableColumn(2, "Object", 80, 40, 
1000,
+               B_TRUNCATE_END, B_ALIGN_LEFT));
+       fWaitObjectsTree->AddColumn(new StringTableColumn(3, "Referenced", 80, 
40,
+               1000, B_TRUNCATE_END, B_ALIGN_LEFT));
+       fWaitObjectsTree->AddColumn(new Int64TableColumn(4, "Waits", 80, 20,
+               1000, B_TRUNCATE_END, B_ALIGN_RIGHT));
+       fWaitObjectsTree->AddColumn(new NanotimeTableColumn(5, "Wait Time", 80,
+               20, 1000, false, B_TRUNCATE_END, B_ALIGN_RIGHT));
+
+       fWaitObjectsTree->AddTreeTableListener(this);
+}
+
+
+ABSTRACT_WAIT_OBJECTS_PAGE_TEMPLATE
+ABSTRACT_WAIT_OBJECTS_PAGE_CLASS::~AbstractWaitObjectsPage()
+{
+       fWaitObjectsTree->SetTreeTableModel(NULL);
+       delete fWaitObjectsTreeModel;
+}
+
+
+ABSTRACT_WAIT_OBJECTS_PAGE_TEMPLATE
+void
+ABSTRACT_WAIT_OBJECTS_PAGE_CLASS::SetModel(ModelType* model)
+{
+       if (model == fModel)
+               return;
+
+       if (fModel != NULL) {
+               fWaitObjectsTree->SetTreeTableModel(NULL);
+               delete fWaitObjectsTreeModel;
+               fWaitObjectsTreeModel = NULL;
+       }
+
+       fModel = model;
+
+       if (fModel != NULL) {
+               try {
+                       fWaitObjectsTreeModel = new 
WaitObjectsTreeModel(fModel);
+               } catch (std::bad_alloc) {
+                       // TODO: Report error!
+               }
+               fWaitObjectsTree->SetTreeTableModel(fWaitObjectsTreeModel);
+               fWaitObjectsTree->ResizeAllColumnsToPreferred();
+       }
+}
+
+
+#endif // ABSTRACT_WAIT_OBJECTS_PAGE_H

Modified: haiku/trunk/src/apps/debuganalyzer/gui/main_window/WaitObjectsPage.cpp
===================================================================
--- haiku/trunk/src/apps/debuganalyzer/gui/main_window/WaitObjectsPage.cpp      
2009-12-12 10:58:47 UTC (rev 34639)
+++ haiku/trunk/src/apps/debuganalyzer/gui/main_window/WaitObjectsPage.cpp      
2009-12-12 12:31:24 UTC (rev 34640)
@@ -1,5 +1,4 @@
 /*
- * Copyright 2009, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx
  * Copyright 2009, Ingo Weinhold, ingo_weinhold@xxxxxxx
  * Distributed under the terms of the MIT License.
  */
@@ -7,122 +6,9 @@
 
 #include "main_window/WaitObjectsPage.h"
 
-#include <stdio.h>
 
-#include <new>
-
-#include <thread_defs.h>
-
-#include "table/TableColumns.h"
-
-
-// #pragma mark - WaitObjectsTableModel
-
-
-class MainWindow::WaitObjectsPage::WaitObjectsTableModel : public TableModel {
-public:
-       WaitObjectsTableModel(Model* model)
-               :
-               fModel(model)
-       {
-       }
-
-       virtual int32 CountColumns() const
-       {
-               return 6;
-       }
-
-       virtual int32 CountRows() const
-       {
-               return fModel->CountWaitObjectGroups();
-       }
-
-       virtual bool GetValueAt(int32 rowIndex, int32 columnIndex, BVariant& 
value)
-       {
-               Model::WaitObjectGroup* group = 
fModel->WaitObjectGroupAt(rowIndex);
-               if (group == NULL)
-                       return false;
-
-               switch (columnIndex) {
-                       case 0:
-                               
value.SetTo(wait_object_type_name(group->Type()),
-                                       B_VARIANT_DONT_COPY_DATA);
-                               return true;
-                       case 1:
-                               value.SetTo(group->Name(), 
B_VARIANT_DONT_COPY_DATA);
-                               return true;
-                       case 4:
-                               value.SetTo(group->Waits());
-                               return true;
-                       case 5:
-                               value.SetTo(group->TotalWaitTime());
-                               return true;
-                       default:
-                               return false;
-               }
-       }
-
-private:
-       Model*  fModel;
-};
-
-
-// #pragma mark - WaitObjectsPage
-
-
 MainWindow::WaitObjectsPage::WaitObjectsPage(MainWindow* parent)
        :
-       BGroupView(B_VERTICAL),
-       fParent(parent),
-       fWaitObjectsTable(NULL),
-       fWaitObjectsTableModel(NULL),
-       fModel(NULL)
+       fParent(parent)
 {
-       SetName("WaitObjects");
-
-       fWaitObjectsTable = new Table("waiting objects list", 0);
-       AddChild(fWaitObjectsTable->ToView());
-
-       fWaitObjectsTable->AddColumn(new StringTableColumn(0, "Type", 80, 40, 
1000,
-               B_TRUNCATE_END, B_ALIGN_LEFT));
-       fWaitObjectsTable->AddColumn(new StringTableColumn(1, "Name", 80, 40, 
1000,
-               B_TRUNCATE_END, B_ALIGN_LEFT));
-//     fWaitObjectsTable->AddColumn(new StringTableColumn(2, "Object", 80, 40, 
1000,
-//             B_TRUNCATE_END, B_ALIGN_LEFT));
-//     fWaitObjectsTable->AddColumn(new StringTableColumn(3, "Referenced", 80, 
40,
-//             1000, B_TRUNCATE_END, B_ALIGN_LEFT));
-       fWaitObjectsTable->AddColumn(new Int64TableColumn(4, "Waits", 80, 40,
-               1000, B_TRUNCATE_END, B_ALIGN_RIGHT));
-       fWaitObjectsTable->AddColumn(new NanotimeTableColumn(5, "Wait Time", 80,
-               40, 1000, false, B_TRUNCATE_END, B_ALIGN_RIGHT));
 }
-
-
-MainWindow::WaitObjectsPage::~WaitObjectsPage()
-{
-       fWaitObjectsTable->SetTableModel(NULL);
-       delete fWaitObjectsTableModel;
-}
-
-
-void
-MainWindow::WaitObjectsPage::SetModel(Model* model)
-{
-       if (model == fModel)
-               return;
-
-       if (fModel != NULL) {
-               fWaitObjectsTable->SetTableModel(NULL);
-               delete fWaitObjectsTableModel;
-               fWaitObjectsTableModel = NULL;
-       }
-
-       fModel = model;
-
-       if (fModel != NULL) {
-               fWaitObjectsTableModel
-                       = new(std::nothrow) WaitObjectsTableModel(fModel);
-               fWaitObjectsTable->SetTableModel(fWaitObjectsTableModel);
-               fWaitObjectsTable->ResizeAllColumnsToPreferred();
-       }
-}

Modified: haiku/trunk/src/apps/debuganalyzer/gui/main_window/WaitObjectsPage.h
===================================================================
--- haiku/trunk/src/apps/debuganalyzer/gui/main_window/WaitObjectsPage.h        
2009-12-12 10:58:47 UTC (rev 34639)
+++ haiku/trunk/src/apps/debuganalyzer/gui/main_window/WaitObjectsPage.h        
2009-12-12 12:31:24 UTC (rev 34640)
@@ -7,27 +7,19 @@
 #define MAIN_WAIT_OBJECTS_PAGE_H
 
 
-#include <GroupView.h>
-
-#include "table/Table.h"
-
+#include "AbstractWaitObjectsPage.h"
+#include "Model.h"
 #include "main_window/MainWindow.h"
 
 
-class MainWindow::WaitObjectsPage : public BGroupView {
+class MainWindow::WaitObjectsPage
+       : public AbstractWaitObjectsPage<Model, Model::WaitObjectGroup,
+               Model::WaitObject> {
 public:
                                                                
WaitObjectsPage(MainWindow* parent);
-       virtual                                         ~WaitObjectsPage();
 
-                       void                            SetModel(Model* model);
-
 private:
-       class WaitObjectsTableModel;
-
                        MainWindow*                     fParent;
-                       Table*                          fWaitObjectsTable;
-                       WaitObjectsTableModel* fWaitObjectsTableModel;
-                       Model*                          fModel;
 };
 
 

Modified: 
haiku/trunk/src/apps/debuganalyzer/gui/thread_window/WaitObjectsPage.cpp
===================================================================
--- haiku/trunk/src/apps/debuganalyzer/gui/thread_window/WaitObjectsPage.cpp    
2009-12-12 10:58:47 UTC (rev 34639)
+++ haiku/trunk/src/apps/debuganalyzer/gui/thread_window/WaitObjectsPage.cpp    
2009-12-12 12:31:24 UTC (rev 34640)
@@ -6,314 +6,7 @@
 
 #include "thread_window/WaitObjectsPage.h"
 
-#include <stdio.h>
 
-#include <new>
-
-#include <thread_defs.h>
-
-#include "ThreadModel.h"
-
-#include "table/TableColumns.h"
-
-
-// #pragma mark - WaitObjectsTreeModel
-
-
-class ThreadWindow::WaitObjectsPage::WaitObjectsTreeModel
-       : public TreeTableModel {
-public:
-       WaitObjectsTreeModel(ThreadModel* model)
-               :
-               fThreadModel(model),
-               fRootNode(NULL)
-       {
-               fRootNode = new RootNode(fThreadModel);
-       }
-
-       ~WaitObjectsTreeModel()
-       {
-               delete fRootNode;
-       }
-
-       virtual void* Root() const
-       {
-               return fRootNode;
-       }
-
-       virtual int32 CountChildren(void* parent) const
-       {
-               return ((Node*)parent)->CountChildren();
-       }
-
-       virtual void* ChildAt(void* parent, int32 index) const
-       {
-               return ((Node*)parent)->ChildAt(index);
-       }
-
-       virtual int32 CountColumns() const
-       {
-               return 6;
-       }
-
-       virtual bool GetValueAt(void* object, int32 columnIndex, BVariant& 
value)
-       {
-               return ((Node*)object)->GetValueAt(columnIndex, value);
-       }
-
-private:
-       struct Node {
-               virtual ~Node() {}
-
-               virtual int32 CountChildren() const = 0;
-               virtual void* ChildAt(int32 index) const = 0;
-               virtual bool GetValueAt(int32 columnIndex, BVariant& value) = 0;
-       };
-
-       struct ObjectNode : Node {
-               Model::ThreadWaitObject* object;
-
-               ObjectNode(Model::ThreadWaitObject* object)
-                       :
-                       object(object)
-               {
-               }
-
-               virtual int32 CountChildren() const
-               {
-                       return 0;
-               }
-
-               virtual void* ChildAt(int32 index) const
-               {
-                       return NULL;
-               }
-
-               virtual bool GetValueAt(int32 columnIndex, BVariant& value)
-               {
-                       return _GetWaitObjectValueAt(object, columnIndex, 
value);
-               }
-       };
-
-       // For GCC 2
-       friend struct ObjectNode;
-
-       struct GroupNode : Node {
-               ThreadModel::WaitObjectGroup*   group;
-               BObjectList<ObjectNode>                 objectNodes;
-
-               GroupNode(ThreadModel::WaitObjectGroup* group)
-                       :
-                       group(group)
-               {
-                       int32 count = group->CountWaitObjects();
-                       for (int32 i = 0; i < count; i++) {
-                               Model::ThreadWaitObject* waitObject = 
group->WaitObjectAt(i);
-                               if (!objectNodes.AddItem(new 
ObjectNode(waitObject)))
-                                       throw std::bad_alloc();
-                       }
-               }
-
-               virtual int32 CountChildren() const
-               {
-                       return objectNodes.CountItems();
-               }
-
-               virtual void* ChildAt(int32 index) const
-               {
-                       return objectNodes.ItemAt(index);
-               }
-
-               virtual bool GetValueAt(int32 columnIndex, BVariant& value)
-               {
-                       if (columnIndex <= 2) {
-                               return 
_GetWaitObjectValueAt(group->WaitObjectAt(0),
-                                       columnIndex, value);
-                       }
-
-                       switch (columnIndex) {
-                               case 4:
-                                       value.SetTo(group->Waits());
-                                       return true;
-                               case 5:
-                                       value.SetTo(group->TotalWaitTime());
-                                       return true;
-                               default:
-                                       return false;
-                       }
-               }
-       };
-
-       // For GCC 2
-       friend struct GroupNode;
-
-       struct RootNode : Node {
-               ThreadModel*            threadModel;
-               BObjectList<Node>       groupNodes;
-
-               RootNode(ThreadModel* model)
-                       :
-                       threadModel(model),
-                       groupNodes(20, true)
-               {
-                       int32 count = threadModel->CountWaitObjectGroups();
-                       for (int32 i = 0; i < count; i++) {
-                               ThreadModel::WaitObjectGroup* group
-                                       = threadModel->WaitObjectGroupAt(i);
-                               if 
(!groupNodes.AddItem(_CreateGroupNode(group)))
-                                       throw std::bad_alloc();
-                       }
-               }
-
-               virtual int32 CountChildren() const
-               {
-                       return groupNodes.CountItems();
-               }
-
-               virtual void* ChildAt(int32 index) const
-               {
-                       return groupNodes.ItemAt(index);
-               }
-
-               virtual bool GetValueAt(int32 columnIndex, BVariant& value)
-               {
-                       return false;
-               }
-
-       private:
-               static Node* _CreateGroupNode(ThreadModel::WaitObjectGroup* 
group)
-               {
-                       // If the group has only one object, just create an 
object node.
-                       if (group->CountWaitObjects() == 1)
-                               return new ObjectNode(group->WaitObjectAt(0));
-
-                       return new GroupNode(group);
-               }
-
-       };
-
-private:
-       static bool _GetWaitObjectValueAt(Model::ThreadWaitObject* waitObject,
-               int32 columnIndex, BVariant& value)
-       {
-               switch (columnIndex) {
-                       case 0:
-                               
value.SetTo(wait_object_type_name(waitObject->Type()),
-                                       B_VARIANT_DONT_COPY_DATA);
-                               return true;
-                       case 1:
-                               value.SetTo(waitObject->Name(), 
B_VARIANT_DONT_COPY_DATA);
-                               return true;
-                       case 2:
-                       {
-                               if (waitObject->Object() == 0)
-                                       return false;
-
-                               char buffer[16];
-                               snprintf(buffer, sizeof(buffer), "%#lx",
-                                       waitObject->Object());
-                               value.SetTo(buffer);
-                               return true;
-                       }
-                       case 3:
-                       {
-                               if (waitObject->ReferencedObject() == 0)
-                                       return false;
-
-                               char buffer[16];
-                               snprintf(buffer, sizeof(buffer), "%#lx",
-                                       waitObject->ReferencedObject());
-                               value.SetTo(buffer);
-                               return true;
-                       }
-                       case 4:
-                               value.SetTo(waitObject->Waits());
-                               return true;
-                       case 5:
-                               value.SetTo(waitObject->TotalWaitTime());
-                               return true;
-                       default:
-                               return false;
-               }
-       }
-
-private:
-       ThreadModel*    fThreadModel;
-       RootNode*               fRootNode;
-};
-
-
-// #pragma mark - WaitObjectsPage
-
-
 ThreadWindow::WaitObjectsPage::WaitObjectsPage()
-       :
-       BGroupView(B_VERTICAL),
-       fWaitObjectsTree(NULL),
-       fWaitObjectsTreeModel(NULL),
-       fThreadModel(NULL)
-
 {
-       SetName("Wait Objects");
-
-       fWaitObjectsTree = new TreeTable("wait object list", 0);
-       AddChild(fWaitObjectsTree->ToView());
-
-       fWaitObjectsTree->AddColumn(new StringTableColumn(0, "Type", 80, 40, 
1000,
-               B_TRUNCATE_END, B_ALIGN_LEFT));
-       fWaitObjectsTree->AddColumn(new StringTableColumn(1, "Name", 80, 40, 
1000,
-               B_TRUNCATE_END, B_ALIGN_LEFT));
-       fWaitObjectsTree->AddColumn(new StringTableColumn(2, "Object", 80, 40, 
1000,
-               B_TRUNCATE_END, B_ALIGN_LEFT));
-       fWaitObjectsTree->AddColumn(new StringTableColumn(3, "Referenced", 80, 
40,
-               1000, B_TRUNCATE_END, B_ALIGN_LEFT));
-       fWaitObjectsTree->AddColumn(new Int64TableColumn(4, "Waits", 80, 20,
-               1000, B_TRUNCATE_END, B_ALIGN_RIGHT));
-       fWaitObjectsTree->AddColumn(new NanotimeTableColumn(5, "Wait Time", 80,
-               20, 1000, false, B_TRUNCATE_END, B_ALIGN_RIGHT));
-
-       fWaitObjectsTree->AddTreeTableListener(this);
 }
-
-
-ThreadWindow::WaitObjectsPage::~WaitObjectsPage()
-{
-       fWaitObjectsTree->SetTreeTableModel(NULL);
-       delete fWaitObjectsTreeModel;
-}
-
-
-void
-ThreadWindow::WaitObjectsPage::SetModel(ThreadModel* model)
-{
-       if (model == fThreadModel)
-               return;
-
-       if (fThreadModel != NULL) {
-               fWaitObjectsTree->SetTreeTableModel(NULL);
-               delete fWaitObjectsTreeModel;
-               fWaitObjectsTreeModel = NULL;
-       }
-
-       fThreadModel = model;
-
-       if (fThreadModel != NULL) {
-               try {
-                       fWaitObjectsTreeModel = new 
WaitObjectsTreeModel(fThreadModel);
-               } catch (std::bad_alloc) {
-                       // TODO: Report error!
-               }
-               fWaitObjectsTree->SetTreeTableModel(fWaitObjectsTreeModel);
-               fWaitObjectsTree->ResizeAllColumnsToPreferred();
-       }
-}
-
-
-void
-ThreadWindow::WaitObjectsPage::TreeTableNodeInvoked(TreeTable* table,
-       const TreeTablePath& path)
-{
-//     Model::Thread* thread = fModel->ThreadAt(rowIndex);
-//     if (thread != NULL)
-//             fParent->OpenThreadWindow(thread);
-}

Modified: haiku/trunk/src/apps/debuganalyzer/gui/thread_window/WaitObjectsPage.h
===================================================================
--- haiku/trunk/src/apps/debuganalyzer/gui/thread_window/WaitObjectsPage.h      
2009-12-12 10:58:47 UTC (rev 34639)
+++ haiku/trunk/src/apps/debuganalyzer/gui/thread_window/WaitObjectsPage.h      
2009-12-12 12:31:24 UTC (rev 34640)
@@ -5,33 +5,17 @@
 #ifndef THREAD_WAIT_OBJECTS_PAGE_H
 #define THREAD_WAIT_OBJECTS_PAGE_H
 
-#include <GroupView.h>
 
-#include "table/TreeTable.h"
-
+#include "AbstractWaitObjectsPage.h"
+#include "ThreadModel.h"
 #include "thread_window/ThreadWindow.h"
 
 
-class ThreadWindow::WaitObjectsPage : public BGroupView,
-       private TreeTableListener {
+class ThreadWindow::WaitObjectsPage
+       : public AbstractWaitObjectsPage<ThreadModel, 
ThreadModel::WaitObjectGroup,
+               Model::ThreadWaitObject> {
 public:
                                                                
WaitObjectsPage();
-       virtual                                         ~WaitObjectsPage();
-
-                       void                            SetModel(ThreadModel* 
model);
-
-private:
-                       class WaitObjectsTreeModel;
-
-private:
-       // TreeTableListener
-       virtual void                            TreeTableNodeInvoked(TreeTable* 
table,
-                                                                       const 
TreeTablePath& path);
-
-private:
-                       TreeTable*                      fWaitObjectsTree;
-                       WaitObjectsTreeModel* fWaitObjectsTreeModel;
-                       ThreadModel*            fThreadModel;
 };
 
 


Other related posts:

  • » [haiku-commits] r34640 - in haiku/trunk/src/apps/debuganalyzer/gui: . main_window thread_window - ingo_weinhold