gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog gui/gtk.cpp gui/gui.cpp gui/gui.h


From: Benjamin Wolsey
Subject: [Gnash-commit] gnash ChangeLog gui/gtk.cpp gui/gui.cpp gui/gui.h
Date: Fri, 07 Mar 2008 12:39:20 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Benjamin Wolsey <bwy>   08/03/07 12:39:19

Modified files:
        .              : ChangeLog 
        gui            : gtk.cpp gui.cpp gui.h 

Log message:
                * gui/gui.{h,cpp}: make data tree-shaped instead of flat.
                * gui/gtk.cpp: update properties dialogue to use tree view.
        
        That's the properties tree started; now to fill it with 
        some more information in a more automated way.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5839&r2=1.5840
http://cvs.savannah.gnu.org/viewcvs/gnash/gui/gtk.cpp?cvsroot=gnash&r1=1.151&r2=1.152
http://cvs.savannah.gnu.org/viewcvs/gnash/gui/gui.cpp?cvsroot=gnash&r1=1.133&r2=1.134
http://cvs.savannah.gnu.org/viewcvs/gnash/gui/gui.h?cvsroot=gnash&r1=1.74&r2=1.75

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5839
retrieving revision 1.5840
diff -u -b -r1.5839 -r1.5840
--- ChangeLog   7 Mar 2008 02:59:34 -0000       1.5839
+++ ChangeLog   7 Mar 2008 12:39:18 -0000       1.5840
@@ -1,3 +1,8 @@
+2008-03-07 Benjamin Wolsey <address@hidden>
+
+       * gui/gui.{h,cpp}: make data tree-shaped instead of flat.
+       * gui/gtk.cpp: update properties dialogue to use tree view.
+
 2008-03-06  Rob Savoye  <address@hidden>
 
        * testsuite/libbase/memtest.cpp: Figures, malloc() on Ubuntu and

Index: gui/gtk.cpp
===================================================================
RCS file: /sources/gnash/gnash/gui/gtk.cpp,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -b -r1.151 -r1.152
--- gui/gtk.cpp 5 Mar 2008 03:55:51 -0000       1.151
+++ gui/gtk.cpp 7 Mar 2008 12:39:19 -0000       1.152
@@ -589,7 +589,6 @@
 
     enum
     {
-        NODENAME_COLUMN = 0,
         STRING1_COLUMN,
         STRING2_COLUMN,
         NUM_COLUMNS
@@ -597,32 +596,30 @@
     
     GtkTreeStore *model = gtk_tree_store_new (NUM_COLUMNS,
                          G_TYPE_STRING,
-                         G_TYPE_STRING,
                          G_TYPE_STRING);
     
     GtkTreeIter iter;
     GtkTreeIter child_iter;
     GtkTreeIter parent_iter;
 
-    int depth = 0;                    // Depth within the gtk tree.    
+    // Depth within the *GTK* tree.
+    int depth = 0;    
 
-    for (InfoTree::iterator i=info.begin_leaf(), e=info.end_leaf(); i!=e; ++i)
+    for (InfoTree::iterator i=info.begin(), e=info.end(); i!=e; ++i)
     {
          StringPair& p = *i;
 
-         int infotreedepth = info.depth(i);  
-         char buf[8];
-         sprintf(buf, "%d", infotreedepth);
-         buf[7] = '\0';                     
+        std::ostringstream os;
+        os << info.depth(i);  
 
-         if (info.depth(i) > depth) {          // Align Gtk tree depth.
+        if (info.depth(i) > depth) {
               depth++;                   
               iter=child_iter;                  
          }
 
-         if (info.depth(i) < depth) {        // Align Gtk tree depth.
+        if (info.depth(i) < depth) {
               depth = info.depth(i);
-              gtk_tree_model_iter_parent (GTK_TREE_MODEL(model), &parent_iter, 
&iter);  // Get parent iter.
+            gtk_tree_model_iter_parent (GTK_TREE_MODEL(model), &parent_iter, 
&iter);  
               iter = parent_iter;
          }
 
@@ -631,9 +628,8 @@
          else gtk_tree_store_append (model, &child_iter, &iter);
 
          gtk_tree_store_set (model, &child_iter,
-                           NODENAME_COLUMN, buf,   //infotree
-                           STRING1_COLUMN, p.first.c_str(),     //infotree
-                          STRING2_COLUMN, p.second.c_str(),     //infotree
+                           STRING1_COLUMN, p.first.c_str(),   // "Variable"
+                              STRING2_COLUMN, p.second.c_str(),  // "Value"
                           -1);
 
     }
@@ -1194,81 +1190,38 @@
                                        GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
                                        NULL);
 
+    // Not too small... But I'd rather not have to specify
+    // a size in pixels.
+    gtk_window_set_default_size (GTK_WINDOW(propsDialog),
+                                 500, 300);
+    
+    // Suggest to the window manager to allow "maximize"
+    // As there can be (will be) a lot of data.
+    gtk_window_set_type_hint(GTK_WINDOW(propsDialog),
+                            GDK_WINDOW_TYPE_HINT_NORMAL);
+
     addGnashIcon(GTK_WINDOW(propsDialog));
 
     // Destroy the window when a button is clicked.
-    g_signal_connect (propsDialog, "response", G_CALLBACK(gtk_widget_destroy), 
NULL);
-
-    // 2 rows: 1 for the title, 1 for the display widget (table or treeview)
-    GtkWidget *propsvbox = gtk_vbox_new (FALSE, 2);
-    gtk_container_add (GTK_CONTAINER (GTK_DIALOG(propsDialog)->vbox), 
propsvbox);
-
-    GtkWidget *propslabel = gtk_label_new(_("<b>VM Properties</b>"));
-    gtk_label_set_use_markup (GTK_LABEL (propslabel), TRUE);
-    gtk_box_pack_start (GTK_BOX (propsvbox), propslabel, FALSE, FALSE, 0);
+    g_signal_connect (propsDialog, "response",
+               G_CALLBACK(gtk_widget_destroy), NULL);
 
-    GtkWidget *table1 = gtk_table_new(4, 2, FALSE);
-    gtk_box_pack_start (GTK_BOX (propsvbox), table1, FALSE, FALSE, 0);
+    GtkWidget *propsvbox = gtk_vbox_new (FALSE, 1);
+    gtk_container_add (GTK_CONTAINER (
+                        GTK_DIALOG(propsDialog)->vbox), propsvbox);
 
     std::auto_ptr<InfoTree> infoptr = getMovieInfo();
 
-    if ( ! infoptr.get() )
-    {
-        GtkWidget *label = gtk_label_new (_("VM not initialized yet"));
-        gtk_widget_show (label);
-        gtk_table_attach_defaults (GTK_TABLE (table1), label, 0, 1, 0, 1);
-        return;
-    }
-
-    else {
-
-#if 1
-        // Table display
-        // This left in while tree information isn't selectable
-
-        InfoTree& info = *infoptr;
-
-        size_t size = info.size();
-
-        for (InfoTree::leaf_iterator i=info.begin_leaf(), e=info.end_leaf();
-                 i!=e; ++i)
-        {
-            StringPair& p = *i;
-            guint up = size;
-            guint bot = size-1;
-
-            GtkWidget *label_table11 = gtk_label_new(p.first.c_str());
-            gtk_table_attach (GTK_TABLE (table1), label_table11, 0, 1, bot, up,
-                         (GtkAttachOptions) (GTK_FILL),
-                         (GtkAttachOptions) (0), 0, 0);
-            gtk_misc_set_alignment (GTK_MISC (label_table11), 0.0, 1.0);
-            gtk_widget_show (label_table11);
-
-            GtkWidget *label_table12 = gtk_label_new(p.second.c_str());
-            gtk_table_attach (GTK_TABLE (table1), label_table12, 1, 2, bot, up,
-                             (GtkAttachOptions) (GTK_FILL),
-                             (GtkAttachOptions) (0), 0, 0);
-            gtk_label_set_selectable (GTK_LABEL (label_table12), TRUE);
-            gtk_widget_show (label_table12);
-
-            --size;
-        }
-
-#else
-        // Tree display
-        // Should replace table display when proper
-        // InfoTrees are available 
-
     GtkWidget *scrollwindow1 = gtk_scrolled_window_new (NULL, NULL);
     gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwindow1),
                                      GTK_POLICY_AUTOMATIC,
                                      GTK_POLICY_AUTOMATIC);
+
     gtk_box_pack_start (
         GTK_BOX (propsvbox), scrollwindow1, TRUE, TRUE, 0);
 
         enum
         {
-            NODENAME_COLUMN = 0,
             STRING1_COLUMN,
             STRING2_COLUMN
         };
@@ -1279,52 +1232,48 @@
 
         g_object_unref (model);
 
-        gint col_offset;
+    ///
+    /// Tree view behaviour.
+    
+    /// Search on "variable" column
+    gtk_tree_view_set_enable_search(GTK_TREE_VIEW(treeview), TRUE);
+    gtk_tree_view_set_search_column (GTK_TREE_VIEW(treeview), 0);
+    
+    /// Nice shading
+    gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
+    
+    gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview), TRUE);
+
+    gint coloffset;
         GtkCellRenderer *renderer;
         GtkTreeViewColumn *column;
 
-        //Add columns:
-        
-#if 0     
-        //  Depth column (for debugging)
-        renderer = gtk_cell_renderer_text_new ();
-        g_object_set (renderer, "xalign", 0.0, NULL);
-        col_offset = gtk_tree_view_insert_column_with_attributes 
(GTK_TREE_VIEW(treeview),
-                                                              -1, _("Depth"),
-                                                      renderer, "text",
-                                                      NODENAME_COLUMN,
-                                                      NULL);
-        column = gtk_tree_view_get_column (GTK_TREE_VIEW(treeview), col_offset 
- 1);
-#endif
+    // Add columns:
 
         // 'Variable' column:
-
         renderer = gtk_cell_renderer_text_new ();
-        g_object_set (renderer, "xalign", 0.0, NULL);
-        col_offset = gtk_tree_view_insert_column_with_attributes 
(GTK_TREE_VIEW(treeview),
+    coloffset = gtk_tree_view_insert_column_with_attributes 
(GTK_TREE_VIEW(treeview),
                                                       -1, _("Variable"),
                                                       renderer, "text",
                                                       STRING1_COLUMN,
                                                       NULL);
-        column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), 
col_offset - 1);
+    column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), coloffset - 
1);
 
         // 'Value' column:
-
+    // Set to be 'editable' so that the data can be selected and
+    // copied; it can't actually be edited, though.
         renderer = gtk_cell_renderer_text_new ();
-        g_object_set (renderer, "xalign", 0.0, NULL);
-        col_offset = gtk_tree_view_insert_column_with_attributes 
(GTK_TREE_VIEW(treeview),
+    g_object_set (renderer, "xalign", 0.0, "editable", TRUE, NULL);
+    coloffset = gtk_tree_view_insert_column_with_attributes 
(GTK_TREE_VIEW(treeview),
                                                       -1, _("Value"),
                                                       renderer, "text",
                                                       STRING2_COLUMN,
                                                       NULL);
-        column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), 
col_offset - 1);
+    column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), coloffset - 
1);
 
         //Add tree to scrollwindow.
         gtk_container_add (GTK_CONTAINER (scrollwindow1), treeview);
 
-#endif
-    }
-
     gtk_widget_show_all (propsDialog);
 
 }

Index: gui/gui.cpp
===================================================================
RCS file: /sources/gnash/gnash/gui/gui.cpp,v
retrieving revision 1.133
retrieving revision 1.134
diff -u -b -r1.133 -r1.134
--- gui/gui.cpp 5 Mar 2008 11:42:36 -0000       1.133
+++ gui/gui.cpp 7 Mar 2008 12:39:19 -0000       1.134
@@ -844,79 +844,105 @@
 std::auto_ptr<Gui::InfoTree>
 Gui::getMovieInfo() const
 {
-    std::auto_ptr<InfoTree> ret;
+    std::auto_ptr<InfoTree> tr;
 
     if ( ! VM::isInitialized() )
     {
-        return ret;
+        return tr;
     }
 
-    ret.reset(new InfoTree());
+    tr.reset(new InfoTree());
+
+    // Top nodes for the tree:
+    // 1. VM information
+    // 2. Movie information
+    // 3. ...
+
+    InfoTree::iterator_base topIter = tr->begin();
+    InfoTree::iterator_base firstLevelIter;
 
     VM& vm = VM::get();
 
-    // Print VM version
-    int vmSWFVersion = vm.getSWFVersion();
-    char buf[16];
-    snprintf(buf, 16, "SWF%d", vmSWFVersion); buf[15] = '\0';
-    ret->insert(ret->begin(), StringPair("VM", buf));
+    std::ostringstream os;
 
-    // Print info about levels (only originating movie for now, then will be 
extended)
+    // VM top level
+    os << "SWF" << vm.getSWFVersion();
+    topIter = tr->insert(topIter, StringPair("VM", os.str()));
+
+    // VM children
     movie_root& stage = vm.getRoot();
     boost::intrusive_ptr<movie_instance> level0 = stage.getRootMovie();
     movie_definition* def0 = level0->get_movie_definition();
     assert(def0);
-    snprintf(buf, 16, "SWF%d", def0->get_version()); buf[15] = '\0';
-    ret->insert(ret->begin(), StringPair("_level0 SWFVersion", 
std::string(buf)));
-    ret->insert(ret->begin(), StringPair("_level0 URL", def0->get_url()));
+
+    os.str("");
+    os << "SWF " << def0->get_version();
+    firstLevelIter = tr->append_child(topIter, StringPair("level0 SWF 
version", os.str()));
+    firstLevelIter = tr->append_child(topIter, StringPair("level0 URL", 
def0->get_url()));
+
 
     // Print info about scripts state (enabled/disabled)
-    ret->insert(ret->begin(), StringPair("Stage scripts", 
stage.scriptsDisabled() ? " disabled" : "enabled"));
+    topIter = tr->insert(topIter, StringPair("Stage scripts",
+                stage.scriptsDisabled() ? " disabled" : "enabled"));
 
     // Print info about mouse entities
+    topIter = tr->insert(topIter, StringPair("Mouse Entities", ""));
 
-    using std::string;
     const character* ch;
-
     ch = stage.getActiveEntityUnderPointer();
     if ( ch )
     {
        std::stringstream ss;
-       ss << ch->getTarget() << " (" + typeName(*ch) << " - id:" << 
ch->get_id() << " depth:" << ch->get_depth();
-       ret->insert(ret->begin(), StringPair("Active mouse entity: ", 
ss.str()));
+           ss << ch->getTarget() << " (" + typeName(*ch)
+            << " - id:" << ch->get_id() << " depth:"
+            << ch->get_depth();
+       firstLevelIter = tr->append_child(topIter, StringPair("Active mouse 
entity", ss.str()));
     }
 
     ch = stage.getEntityUnderPointer();
     if ( ch )
     {
        std::stringstream ss;
-       ss << ch->getTarget() << " (" + typeName(*ch) << " - id:" << 
ch->get_id() << " depth:" << ch->get_depth();
-       ret->insert(ret->begin(), StringPair("Topmost mouse entity: ", 
ss.str()));
+           ss << ch->getTarget() << " (" + typeName(*ch) <<
+            " - id:" << ch->get_id() << " depth:" << ch->get_depth();
+       firstLevelIter = tr->append_child(topIter, StringPair("Topmost mouse 
entity", ss.str()));
     }
 
     ch = stage.getDraggingCharacter();
     if ( ch ) 
     {
        std::stringstream ss;
-       ss << ch->getTarget() << " (" + typeName(*ch) << " - id:" << 
ch->get_id() << " depth:" << ch->get_depth();
-       ret->insert(ret->begin(), StringPair("Dragging character: ", ss.str()));
+           ss << ch->getTarget() << " (" + typeName(*ch) <<
+            " - id:" << ch->get_id() << " depth:" << ch->get_depth();
+       firstLevelIter = tr->append_child(topIter, StringPair("Dragging 
character: ", ss.str()));
     }
 
+    // GC row
+    topIter = tr->insert(topIter, StringPair("GC Statistics", ""));
     GC::CollectablesCount cc;
     GC::get().countCollectables(cc);
-    // TODO: print sorted by value
-    std::string lbl = "GC managed ";
+    
+    const std::string lbl = "GC managed ";
     for (GC::CollectablesCount::iterator i=cc.begin(), e=cc.end(); i!=e; ++i)
     {
         const std::string& typ = i->first;
-        unsigned int c = i->second;
-        char buf[32];
-        snprintf(buf, 31, "%u", c);
-        buf[31] = '\0';
-        ret->insert(ret->begin(), StringPair(lbl+typ, std::string(buf)));
-    }
+        std::ostringstream ss;
+        ss << i->second;
+        firstLevelIter = tr->append_child(topIter,
+                            StringPair(lbl + typ, ss.str()));
+    }
+
+    tr->sort(firstLevelIter.begin(), firstLevelIter.end());
+
+//    for (InfoTree::pre_order_iterator it = tr->begin(); it != tr->end(); 
it++)
+//    {
+//        int j = 0;
+//        while (j++ < tr->depth(it)) std::cout << " ";
+//        StringPair& p = *it;
+//        std::cout << p.first << ": " << p.second << std::endl;
+//    }
 
-    return ret;
+    return tr;
 }
 
 #ifdef GNASH_FPS_DEBUG

Index: gui/gui.h
===================================================================
RCS file: /sources/gnash/gnash/gui/gui.h,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -b -r1.74 -r1.75
--- gui/gui.h   21 Jan 2008 20:55:42 -0000      1.74
+++ gui/gui.h   7 Mar 2008 12:39:19 -0000       1.75
@@ -291,7 +291,7 @@
 #endif // def GNASH_FPS_DEBUG
 
     // TODO: use a tree-like structure (tree.hh?)
-    typedef std::pair<std::string,std::string> StringPair;
+    typedef std::pair<std::string, std::string> StringPair;
     typedef tree<StringPair> InfoTree;
 
     /// \brief




reply via email to

[Prev in Thread] Current Thread [Next in Thread]