| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- // Filename: gtkStatsLabelStack.cxx
- // Created by: drose (16Jan06)
- //
- ////////////////////////////////////////////////////////////////////
- //
- // PANDA 3D SOFTWARE
- // Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
- //
- // All use of this software is subject to the terms of the Panda 3d
- // Software license. You should have received a copy of this license
- // along with this source code; you will also find a current copy of
- // the license at http://etc.cmu.edu/panda3d/docs/license/ .
- //
- // To contact the maintainers of this program write to
- // [email protected] .
- //
- ////////////////////////////////////////////////////////////////////
- #include "gtkStatsLabelStack.h"
- #include "gtkStatsLabel.h"
- #include "pnotify.h"
- ////////////////////////////////////////////////////////////////////
- // Function: GtkStatsLabelStack::Constructor
- // Access: Public
- // Description:
- ////////////////////////////////////////////////////////////////////
- GtkStatsLabelStack::
- GtkStatsLabelStack() {
- _widget = gtk_vbox_new(FALSE, 0);
- _highlight_label = -1;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: GtkStatsLabelStack::Destructor
- // Access: Public
- // Description:
- ////////////////////////////////////////////////////////////////////
- GtkStatsLabelStack::
- ~GtkStatsLabelStack() {
- clear_labels();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: GtkStatsLabelStack::get_widget
- // Access: Public
- // Description: Returns the widget for this stack.
- ////////////////////////////////////////////////////////////////////
- GtkWidget *GtkStatsLabelStack::
- get_widget() const {
- return _widget;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: GtkStatsLabelStack::get_label_y
- // Access: Public
- // Description: Returns the y position of the indicated label's bottom
- // edge, relative to the indicated target widget.
- ////////////////////////////////////////////////////////////////////
- int GtkStatsLabelStack::
- get_label_y(int label_index, GtkWidget *target_widget) const {
- nassertr(label_index >= 0 && label_index < (int)_labels.size(), 0);
- // Assume all labels have the same height.
- int height = _labels[0]->get_height();
- int start_y = _widget->allocation.height - height * label_index;
- int x, y;
- gtk_widget_translate_coordinates(_widget, target_widget,
- 0, start_y, &x, &y);
- return y;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: GtkStatsLabelStack::get_label_height
- // Access: Public
- // Description: Returns the height of the indicated label.
- ////////////////////////////////////////////////////////////////////
- int GtkStatsLabelStack::
- get_label_height(int label_index) const {
- nassertr(label_index >= 0 && label_index < (int)_labels.size(), 0);
- return _labels[label_index]->get_height();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: GtkStatsLabelStack::get_label_collector_index
- // Access: Public
- // Description: Returns the collector index associated with the
- // indicated label.
- ////////////////////////////////////////////////////////////////////
- int GtkStatsLabelStack::
- get_label_collector_index(int label_index) const {
- nassertr(label_index >= 0 && label_index < (int)_labels.size(), -1);
- return _labels[label_index]->get_collector_index();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: GtkStatsLabelStack::clear_labels
- // Access: Public
- // Description: Removes the set of labels and starts a new set.
- ////////////////////////////////////////////////////////////////////
- void GtkStatsLabelStack::
- clear_labels() {
- Labels::iterator li;
- for (li = _labels.begin(); li != _labels.end(); ++li) {
- GtkStatsLabel *label = (*li);
- gtk_container_remove(GTK_CONTAINER(_widget), label->get_widget());
- delete (*li);
- }
- _labels.clear();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: GtkStatsLabelStack::add_label
- // Access: Public
- // Description: Adds a new label to the top of the stack; returns the
- // new label index.
- ////////////////////////////////////////////////////////////////////
- int GtkStatsLabelStack::
- add_label(GtkStatsMonitor *monitor, GtkStatsGraph *graph,
- int thread_index, int collector_index, bool use_fullname) {
- GtkStatsLabel *label =
- new GtkStatsLabel(monitor, graph, thread_index, collector_index, use_fullname);
- gtk_box_pack_end(GTK_BOX(_widget), label->get_widget(),
- FALSE, FALSE, 0);
- int label_index = (int)_labels.size();
- _labels.push_back(label);
- return label_index;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: GtkStatsLabelStack::get_num_labels
- // Access: Public
- // Description: Returns the number of labels in the stack.
- ////////////////////////////////////////////////////////////////////
- int GtkStatsLabelStack::
- get_num_labels() const {
- return _labels.size();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: GtkStatsLabelStack::highlight_label
- // Access: Public
- // Description: Draws a highlight around the label representing the
- // indicated collector, and removes the highlight from
- // any other label. Specify -1 to remove the highlight
- // from all labels.
- ////////////////////////////////////////////////////////////////////
- void GtkStatsLabelStack::
- highlight_label(int collector_index) {
- if (_highlight_label != collector_index) {
- _highlight_label = collector_index;
- Labels::iterator li;
- for (li = _labels.begin(); li != _labels.end(); ++li) {
- GtkStatsLabel *label = (*li);
- label->set_highlight(label->get_collector_index() == _highlight_label);
- }
- }
- }
|