[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog gui/gtk.cpp gui/gui.cpp gui/gui.h,
Benjamin Wolsey <=