[sysprof/wip/chergert/sysprof-3] libsysprof-ui: hide callgraph when no data is present



commit a20e784766b5ddb533b1b921a25d2eb09da40633
Author: Christian Hergert <chergert redhat com>
Date:   Wed May 15 16:53:11 2019 -0700

    libsysprof-ui: hide callgraph when no data is present

 src/libsysprof-ui/sysprof-callgraph-view.c     |  17 +-
 src/libsysprof-ui/ui/sysprof-callgraph-view.ui | 230 +++++++++++++------------
 2 files changed, 137 insertions(+), 110 deletions(-)
---
diff --git a/src/libsysprof-ui/sysprof-callgraph-view.c b/src/libsysprof-ui/sysprof-callgraph-view.c
index de9b55b..27f848d 100644
--- a/src/libsysprof-ui/sysprof-callgraph-view.c
+++ b/src/libsysprof-ui/sysprof-callgraph-view.c
@@ -54,6 +54,7 @@ typedef struct
   GtkTreeView         *functions_view;
   GtkTreeView         *descendants_view;
   GtkTreeViewColumn   *descendants_name_column;
+  GtkStack            *stack;
 
   GQueue              *history;
 
@@ -149,7 +150,7 @@ build_functions_store (StackNode *node,
 
 static void
 sysprof_callgraph_view_load (SysprofCallgraphView    *self,
-                        SysprofCallgraphProfile *profile)
+                             SysprofCallgraphProfile *profile)
 {
   SysprofCallgraphViewPrivate *priv = sysprof_callgraph_view_get_instance_private (self);
   GtkListStore *functions;
@@ -173,9 +174,10 @@ sysprof_callgraph_view_load (SysprofCallgraphView    *self,
    *       insensitive and give some indication of loading progress.
    */
 
-  g_set_object (&priv->profile, profile);
+  if (!g_set_object (&priv->profile, profile))
+    return;
 
-  if (NULL == (stash = sysprof_callgraph_profile_get_stash (profile)))
+  if (!(stash = sysprof_callgraph_profile_get_stash (profile)))
     return;
 
   for (n = stack_stash_get_root (stash); n; n = n->siblings)
@@ -202,6 +204,8 @@ sysprof_callgraph_view_load (SysprofCallgraphView    *self,
       gtk_tree_selection_select_iter (selection, &iter);
     }
 
+  gtk_stack_set_visible_child_name (priv->stack, "callgraph");
+
   g_clear_object (&functions);
 }
 
@@ -220,6 +224,8 @@ sysprof_callgraph_view_unload (SysprofCallgraphView *self)
   gtk_tree_view_set_model (priv->callers_view, NULL);
   gtk_tree_view_set_model (priv->functions_view, NULL);
   gtk_tree_view_set_model (priv->descendants_view, NULL);
+
+  gtk_stack_set_visible_child_name (priv->stack, "empty-state");
 }
 
 /**
@@ -239,7 +245,7 @@ sysprof_callgraph_view_get_profile (SysprofCallgraphView *self)
 
 void
 sysprof_callgraph_view_set_profile (SysprofCallgraphView    *self,
-                               SysprofCallgraphProfile *profile)
+                                    SysprofCallgraphProfile *profile)
 {
   SysprofCallgraphViewPrivate *priv = sysprof_callgraph_view_get_instance_private (self);
 
@@ -758,6 +764,7 @@ sysprof_callgraph_view_class_init (SysprofCallgraphViewClass *klass)
   gtk_widget_class_bind_template_child_private (widget_class, SysprofCallgraphView, functions_view);
   gtk_widget_class_bind_template_child_private (widget_class, SysprofCallgraphView, descendants_view);
   gtk_widget_class_bind_template_child_private (widget_class, SysprofCallgraphView, descendants_name_column);
+  gtk_widget_class_bind_template_child_private (widget_class, SysprofCallgraphView, stack);
 
   bindings = gtk_binding_set_by_class (klass);
   gtk_binding_entry_add_signal (bindings, GDK_KEY_Left, GDK_MOD1_MASK, "go-previous", 0);
@@ -776,6 +783,8 @@ sysprof_callgraph_view_init (SysprofCallgraphView *self)
 
   gtk_widget_init_template (GTK_WIDGET (self));
 
+  gtk_stack_set_visible_child_name (priv->stack, "empty-state");
+
   selection = gtk_tree_view_get_selection (priv->functions_view);
 
   g_signal_connect_object (selection,
diff --git a/src/libsysprof-ui/ui/sysprof-callgraph-view.ui b/src/libsysprof-ui/ui/sysprof-callgraph-view.ui
index f130496..a8b9778 100644
--- a/src/libsysprof-ui/ui/sysprof-callgraph-view.ui
+++ b/src/libsysprof-ui/ui/sysprof-callgraph-view.ui
@@ -1,100 +1,158 @@
 <interface>
   <template class="SysprofCallgraphView" parent="GtkBin">
     <child>
-      <object class="GtkPaned">
-        <property name="orientation">horizontal</property>
-        <property name="position">450</property>
+      <object class="GtkStack" id="stack">
         <property name="visible">true</property>
         <child>
           <object class="GtkPaned">
-            <property name="orientation">vertical</property>
+            <property name="orientation">horizontal</property>
+            <property name="position">450</property>
             <property name="visible">true</property>
             <child>
-              <object class="GtkScrolledWindow">
+              <object class="GtkPaned">
+                <property name="orientation">vertical</property>
                 <property name="visible">true</property>
                 <child>
-                  <object class="GtkTreeView" id="functions_view">
-                    <property name="fixed-height-mode">true</property>
+                  <object class="GtkScrolledWindow">
                     <property name="visible">true</property>
                     <child>
-                      <object class="GtkTreeViewColumn" id="function_name_column">
-                        <property name="expand">true</property>
-                        <property name="sizing">fixed</property>
-                        <property name="sort-column-id">0</property>
-                        <property name="title" translatable="yes">Functions</property>
+                      <object class="GtkTreeView" id="functions_view">
+                        <property name="fixed-height-mode">true</property>
+                        <property name="visible">true</property>
                         <child>
-                          <object class="GtkCellRendererText">
-                            <property name="ellipsize">middle</property>
+                          <object class="GtkTreeViewColumn" id="function_name_column">
+                            <property name="expand">true</property>
+                            <property name="sizing">fixed</property>
+                            <property name="sort-column-id">0</property>
+                            <property name="title" translatable="yes">Functions</property>
+                            <child>
+                              <object class="GtkCellRendererText">
+                                <property name="ellipsize">middle</property>
+                              </object>
+                              <attributes>
+                                <attribute name="text">0</attribute>
+                              </attributes>
+                            </child>
                           </object>
-                          <attributes>
-                            <attribute name="text">0</attribute>
-                          </attributes>
                         </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkTreeViewColumn" id="function_self_column">
-                        <property name="expand">false</property>
-                        <property name="sizing">fixed</property>
-                        <property name="sort-column-id">1</property>
-                        <property name="title" translatable="yes">Self</property>
                         <child>
-                          <object class="SysprofCellRendererPercent">
-                            <property name="xpad">6</property>
+                          <object class="GtkTreeViewColumn" id="function_self_column">
+                            <property name="expand">false</property>
+                            <property name="sizing">fixed</property>
+                            <property name="sort-column-id">1</property>
+                            <property name="title" translatable="yes">Self</property>
+                            <child>
+                              <object class="SysprofCellRendererPercent">
+                                <property name="xpad">6</property>
+                              </object>
+                              <attributes>
+                                <attribute name="percent">1</attribute>
+                              </attributes>
+                            </child>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkTreeViewColumn" id="function_total_column">
+                            <property name="expand">false</property>
+                            <property name="sizing">fixed</property>
+                            <property name="sort-column-id">2</property>
+                            <property name="title" translatable="yes">Total</property>
+                            <child>
+                              <object class="SysprofCellRendererPercent">
+                                <property name="xpad">6</property>
+                              </object>
+                              <attributes>
+                                <attribute name="percent">2</attribute>
+                              </attributes>
+                            </child>
                           </object>
-                          <attributes>
-                            <attribute name="percent">1</attribute>
-                          </attributes>
                         </child>
                       </object>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="resize">true</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow">
+                    <property name="visible">true</property>
                     <child>
-                      <object class="GtkTreeViewColumn" id="function_total_column">
-                        <property name="expand">false</property>
-                        <property name="sizing">fixed</property>
-                        <property name="sort-column-id">2</property>
-                        <property name="title" translatable="yes">Total</property>
+                      <object class="GtkTreeView" id="callers_view">
+                        <property name="visible">true</property>
                         <child>
-                          <object class="SysprofCellRendererPercent">
-                            <property name="xpad">6</property>
+                          <object class="GtkTreeViewColumn" id="callers_name_column">
+                            <property name="expand">true</property>
+                            <property name="sizing">fixed</property>
+                            <property name="sort-column-id">0</property>
+                            <property name="title" translatable="yes">Callers</property>
+                            <child>
+                              <object class="GtkCellRendererText">
+                                <property name="ellipsize">middle</property>
+                              </object>
+                              <attributes>
+                                <attribute name="text">0</attribute>
+                              </attributes>
+                            </child>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkTreeViewColumn" id="callers_self_column">
+                            <property name="expand">false</property>
+                            <property name="sizing">fixed</property>
+                            <property name="sort-column-id">1</property>
+                            <property name="title" translatable="yes">Self</property>
+                            <child>
+                              <object class="SysprofCellRendererPercent">
+                                <property name="xpad">6</property>
+                              </object>
+                              <attributes>
+                                <attribute name="percent">1</attribute>
+                              </attributes>
+                            </child>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkTreeViewColumn" id="callers_total_column">
+                            <property name="expand">false</property>
+                            <property name="sizing">fixed</property>
+                            <property name="sort-column-id">2</property>
+                            <property name="title" translatable="yes">Total</property>
+                            <child>
+                              <object class="SysprofCellRendererPercent">
+                                <property name="xpad">6</property>
+                              </object>
+                              <attributes>
+                                <attribute name="percent">2</attribute>
+                              </attributes>
+                            </child>
                           </object>
-                          <attributes>
-                            <attribute name="percent">2</attribute>
-                          </attributes>
                         </child>
                       </object>
                     </child>
                   </object>
+                  <packing>
+                    <property name="resize">true</property>
+                  </packing>
                 </child>
               </object>
-              <packing>
-                <property name="resize">true</property>
-              </packing>
             </child>
             <child>
               <object class="GtkScrolledWindow">
                 <property name="visible">true</property>
                 <child>
-                  <object class="GtkTreeView" id="callers_view">
+                  <object class="GtkTreeView" id="descendants_view">
                     <property name="visible">true</property>
                     <child>
-                      <object class="GtkTreeViewColumn" id="callers_name_column">
+                      <object class="GtkTreeViewColumn" id="descendants_name_column">
                         <property name="expand">true</property>
                         <property name="sizing">fixed</property>
                         <property name="sort-column-id">0</property>
-                        <property name="title" translatable="yes">Callers</property>
-                        <child>
-                          <object class="GtkCellRendererText">
-                            <property name="ellipsize">middle</property>
-                          </object>
-                          <attributes>
-                            <attribute name="text">0</attribute>
-                          </attributes>
-                        </child>
+                        <property name="title" translatable="yes">Descendants</property>
                       </object>
                     </child>
                     <child>
-                      <object class="GtkTreeViewColumn" id="callers_self_column">
+                      <object class="GtkTreeViewColumn" id="descendants_self_column">
                         <property name="expand">false</property>
                         <property name="sizing">fixed</property>
                         <property name="sort-column-id">1</property>
@@ -110,11 +168,11 @@
                       </object>
                     </child>
                     <child>
-                      <object class="GtkTreeViewColumn" id="callers_total_column">
+                      <object class="GtkTreeViewColumn" id="descendants_total_column">
                         <property name="expand">false</property>
                         <property name="sizing">fixed</property>
                         <property name="sort-column-id">2</property>
-                        <property name="title" translatable="yes">Total</property>
+                        <property name="title" translatable="yes">Cumulative</property>
                         <child>
                           <object class="SysprofCellRendererPercent">
                             <property name="xpad">6</property>
@@ -128,61 +186,21 @@
                   </object>
                 </child>
               </object>
-              <packing>
-                <property name="resize">true</property>
-              </packing>
             </child>
           </object>
+          <packing>
+            <property name="name">callgraph</property>
+          </packing>
         </child>
         <child>
-          <object class="GtkScrolledWindow">
+          <object class="SysprofEmptyStateView">
+            <property name="title" translatable="yes">Not Enough Samples</property>
+            <property name="subtitle" translatable="yes">More samples are necessary to display a 
callgraph.</property>
             <property name="visible">true</property>
-            <child>
-              <object class="GtkTreeView" id="descendants_view">
-                <property name="visible">true</property>
-                <child>
-                  <object class="GtkTreeViewColumn" id="descendants_name_column">
-                    <property name="expand">true</property>
-                    <property name="sizing">fixed</property>
-                    <property name="sort-column-id">0</property>
-                    <property name="title" translatable="yes">Descendants</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkTreeViewColumn" id="descendants_self_column">
-                    <property name="expand">false</property>
-                    <property name="sizing">fixed</property>
-                    <property name="sort-column-id">1</property>
-                    <property name="title" translatable="yes">Self</property>
-                    <child>
-                      <object class="SysprofCellRendererPercent">
-                        <property name="xpad">6</property>
-                      </object>
-                      <attributes>
-                        <attribute name="percent">1</attribute>
-                      </attributes>
-                    </child>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkTreeViewColumn" id="descendants_total_column">
-                    <property name="expand">false</property>
-                    <property name="sizing">fixed</property>
-                    <property name="sort-column-id">2</property>
-                    <property name="title" translatable="yes">Cumulative</property>
-                    <child>
-                      <object class="SysprofCellRendererPercent">
-                        <property name="xpad">6</property>
-                      </object>
-                      <attributes>
-                        <attribute name="percent">2</attribute>
-                      </attributes>
-                    </child>
-                  </object>
-                </child>
-              </object>
-            </child>
           </object>
+          <packing>
+            <property name="name">empty-state</property>
+          </packing>
         </child>
       </object>
     </child>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]