12#include "ns3/config.h" 
   13#include "ns3/pointer.h" 
   14#include "ns3/string.h" 
   24                         GtkCellRenderer* renderer,
 
   30    gtk_tree_model_get(model, iter, 
COL_NODE, &node, -1);
 
   39        g_object_set(renderer, 
"text", str.Get().c_str(), 
nullptr);
 
   40        g_object_set(renderer, 
"editable", TRUE, 
nullptr);
 
   44        g_object_set(renderer, 
"text", 
"", 
nullptr);
 
   45        g_object_set(renderer, 
"editable", FALSE, 
nullptr);
 
 
   55                         GtkCellRenderer* renderer,
 
   61    gtk_tree_model_get(model, iter, 
COL_NODE, &node, -1);
 
   62    g_object_set(renderer, 
"editable", FALSE, 
nullptr);
 
   71        g_object_set(renderer,
 
   79        g_object_set(renderer, 
"text", node->
name.c_str(), 
nullptr);
 
   82        std::stringstream oss;
 
   84        g_object_set(renderer, 
"text", oss.str().c_str(), 
nullptr);
 
 
   98    GtkTreeModel* model = GTK_TREE_MODEL(user_data);
 
  100    gtk_tree_model_get_iter_from_string(model, &iter, path_string);
 
  102    gtk_tree_model_get(model, &iter, 
COL_NODE, &node, -1);
 
 
  120    g_return_val_if_fail(col != 
nullptr, -1);
 
  121    g_return_val_if_fail(gtk_tree_view_column_get_tree_view(col) != 
nullptr, -1);
 
  122    cols = gtk_tree_view_get_columns(GTK_TREE_VIEW(gtk_tree_view_column_get_tree_view(col)));
 
  123    num = g_list_index(cols, (gpointer)col);
 
 
  136                      gboolean keyboard_tip,
 
  142    GtkTreeViewColumn* column;
 
  143    if (!gtk_tree_view_get_tooltip_context(GTK_TREE_VIEW(widget),
 
  153    if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget),
 
  166    gtk_tree_model_get(model, &iter, 
COL_NODE, &node, -1);
 
  179            gtk_tooltip_set_text(tooltip, tip.c_str());
 
  190            gtk_tooltip_set_text(tooltip, tip.c_str());
 
  201            gtk_tooltip_set_text(tooltip, tip.c_str());
 
  223            gtk_tooltip_set_text(tooltip, tip.c_str());
 
  230            tip = 
"This attribute is of type " + checker->GetValueTypeName();
 
  231            if (checker->HasUnderlyingTypeInformation())
 
  233                tip += 
" " + checker->GetUnderlyingTypeInformation();
 
  235            gtk_tooltip_set_text(tooltip, tip.c_str());
 
 
  251    GtkTreeViewColumn* col;
 
  252    GtkCellRenderer* renderer;
 
  255    view = gtk_tree_view_new();
 
  256    g_object_set(view, 
"has-tooltip", TRUE, 
nullptr);
 
  259    gtk_tree_view_set_grid_lines(GTK_TREE_VIEW(view), GTK_TREE_VIEW_GRID_LINES_BOTH);
 
  262    col = gtk_tree_view_column_new();
 
  263    gtk_tree_view_column_set_title(col, 
"Object Attributes");
 
  264    gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
 
  265    renderer = gtk_cell_renderer_text_new();
 
  266    gtk_tree_view_column_pack_start(col, renderer, TRUE);
 
  267    gtk_tree_view_column_set_cell_data_func(col,
 
  272    g_object_set(renderer, 
"editable", FALSE, 
nullptr);
 
  274    col = gtk_tree_view_column_new();
 
  275    gtk_tree_view_column_set_title(col, 
"Attribute Value");
 
  276    gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
 
  277    renderer = gtk_cell_renderer_text_new();
 
  279    gtk_tree_view_column_pack_start(col, renderer, TRUE);
 
  280    gtk_tree_view_column_set_cell_data_func(col,
 
  286    gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(model));
 
  288    g_object_unref(model); 
 
 
  300    gtk_widget_hide(GTK_WIDGET(user_data));
 
 
  310    gtk_widget_hide(GTK_WIDGET(user_data));
 
 
  321    gtk_tree_model_get(GTK_TREE_MODEL(model), iter, 
COL_NODE, &node, -1);
 
  326    gtk_tree_store_set(GTK_TREE_STORE(model), iter, 
COL_NODE, 
nullptr, -1);
 
 
  337                                        GtkCellRenderer* renderer,
 
  343    gtk_tree_model_get(model, iter, 
COL_TYPEID, &node, -1);
 
  350        g_object_set(renderer, 
"text", node->
defaultValue.c_str(), 
nullptr);
 
  351        g_object_set(renderer, 
"editable", TRUE, 
nullptr);
 
  355        g_object_set(renderer, 
"text", 
"", 
nullptr);
 
  356        g_object_set(renderer, 
"editable", FALSE, 
nullptr);
 
 
  365                                        GtkCellRenderer* renderer,
 
  371    gtk_tree_model_get(model, iter, 
COL_NODE, &node, -1);
 
  372    g_object_set(renderer, 
"editable", FALSE, 
nullptr);
 
  381        g_object_set(renderer, 
"text", node->
tid.
GetName().c_str(), 
nullptr);
 
  384        g_object_set(renderer, 
"text", node->
name.c_str(), 
nullptr);
 
 
  400    GtkTreeModel* model = GTK_TREE_MODEL(user_data);
 
  402    gtk_tree_model_get_iter_from_string(model, &iter, path_string);
 
  404    gtk_tree_model_get(model, &iter, 
COL_NODE, &node, -1);
 
 
  435                                     gboolean keyboard_tip,
 
  441    GtkTreeViewColumn* column;
 
  442    if (!gtk_tree_view_get_tooltip_context(GTK_TREE_VIEW(widget),
 
  452    if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget),
 
  465    gtk_tree_model_get(model, &iter, 
COL_NODE, &node, -1);
 
  476            std::string tip = 
"This object is of type " + node->
tid.
GetName();
 
  477            gtk_tooltip_set_text(tooltip, tip.c_str());
 
  486            gtk_tooltip_set_text(tooltip, tip.c_str());
 
  492            tip = 
"This attribute is of type " + checker->GetValueTypeName();
 
  493            if (checker->HasUnderlyingTypeInformation())
 
  495                tip += 
" " + checker->GetUnderlyingTypeInformation();
 
  497            gtk_tooltip_set_text(tooltip, tip.c_str());
 
 
  516    GtkWindow* parent_window = GTK_WINDOW(user_data);
 
  518    GtkFileChooserNative* native;
 
  519    GtkFileChooser* chooser;
 
  520    GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
 
  523    native = gtk_file_chooser_native_new(
"Save File", parent_window, action, 
"_Save", 
"_Cancel");
 
  524    chooser = GTK_FILE_CHOOSER(native);
 
  526    gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE);
 
  528    gtk_file_chooser_set_current_name(chooser, (
"config-defaults.txt"));
 
  530    res = gtk_native_dialog_run(GTK_NATIVE_DIALOG(native));
 
  531    if (res == GTK_RESPONSE_ACCEPT)
 
  535        filename = gtk_file_chooser_get_filename(chooser);
 
  542    g_object_unref(native);
 
 
  554    GtkWindow* parent_window = GTK_WINDOW(user_data);
 
  555    GtkFileChooserNative* native;
 
  556    GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
 
  559    native = gtk_file_chooser_native_new(
"Open File", parent_window, action, 
"_Open", 
"_Cancel");
 
  561    res = gtk_native_dialog_run(GTK_NATIVE_DIALOG(native));
 
  562    if (res == GTK_RESPONSE_ACCEPT)
 
  565        GtkFileChooser* chooser = GTK_FILE_CHOOSER(native);
 
  566        filename = gtk_file_chooser_get_filename(chooser);
 
  573    g_object_unref(native);
 
 
  586    GtkWindow* parent_window = GTK_WINDOW(user_data);
 
  588    GtkFileChooserNative* native;
 
  589    GtkFileChooser* chooser;
 
  590    GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
 
  593    native = gtk_file_chooser_native_new(
"Save File", parent_window, action, 
"_Save", 
"_Cancel");
 
  594    chooser = GTK_FILE_CHOOSER(native);
 
  596    gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE);
 
  598    gtk_file_chooser_set_current_name(chooser, (
"config-attributes.txt"));
 
  600    res = gtk_native_dialog_run(GTK_NATIVE_DIALOG(native));
 
  601    if (res == GTK_RESPONSE_ACCEPT)
 
  605        filename = gtk_file_chooser_get_filename(chooser);
 
  612    g_object_unref(native);
 
 
  624    GtkWindow* parent_window = GTK_WINDOW(user_data);
 
  625    GtkFileChooserNative* native;
 
  626    GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
 
  629    native = gtk_file_chooser_native_new(
"Open File", parent_window, action, 
"_Open", 
"_Cancel");
 
  631    res = gtk_native_dialog_run(GTK_NATIVE_DIALOG(native));
 
  632    if (res == GTK_RESPONSE_ACCEPT)
 
  635        GtkFileChooser* chooser = GTK_FILE_CHOOSER(native);
 
  636        filename = gtk_file_chooser_get_filename(chooser);
 
  643    g_object_unref(native);
 
 
  653    GtkTreeViewColumn* col;
 
  654    GtkCellRenderer* renderer;
 
  657    view = gtk_tree_view_new();
 
  658    g_object_set(view, 
"has-tooltip", TRUE, 
nullptr);
 
  661    gtk_tree_view_set_grid_lines(GTK_TREE_VIEW(view), GTK_TREE_VIEW_GRID_LINES_BOTH);
 
  664    col = gtk_tree_view_column_new();
 
  665    gtk_tree_view_column_set_title(col, 
"Object Attributes");
 
  666    gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
 
  667    renderer = gtk_cell_renderer_text_new();
 
  668    gtk_tree_view_column_pack_start(col, renderer, TRUE);
 
  669    gtk_tree_view_column_set_cell_data_func(col,
 
  674    g_object_set(renderer, 
"editable", FALSE, 
nullptr);
 
  676    col = gtk_tree_view_column_new();
 
  677    gtk_tree_view_column_set_title(col, 
"Attribute Value");
 
  678    gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
 
  679    renderer = gtk_cell_renderer_text_new();
 
  681    gtk_tree_view_column_pack_start(col, renderer, TRUE);
 
  682    gtk_tree_view_column_set_cell_data_func(col,
 
  688    gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(model));
 
  690    g_object_unref(model); 
 
 
  705    gtk_tree_model_get(GTK_TREE_MODEL(model), iter, 
COL_TYPEID, &node, -1);
 
  710    gtk_tree_store_set(GTK_TREE_STORE(model), iter, 
COL_TYPEID, 
nullptr, -1);
 
 
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
void GetAttribute(std::string name, AttributeValue &value, bool permissive=false) const
Get the value of an attribute, raising fatal errors if unsuccessful.
TypeId GetInstanceTypeId() const final
Get the most derived TypeId for this Object.
AttributeValue implementation for Pointer.
Ptr< Object > GetObject() const
Get the Object referenced by the PointerValue.
Smart pointer class similar to boost::intrusive_ptr.
A class to enable loading of configuration store from a raw text file.
void SetFilename(std::string filename) override
Set the file name.
void Attributes() override
Load or save the attributes values.
void Default() override
Load or save the default values.
A class to enable saving of configuration store in a raw text file.
void Attributes() override
Load or save the attributes values.
void SetFilename(std::string filename) override
Set the file name.
void Default() override
Load or save the default values.
Hold variables of type string.
a unique identifier for an interface.
bool HasParent() const
Check if this TypeId has a parent.
std::string GetAttributeFullName(std::size_t i) const
Get the Attribute name by index.
std::size_t GetAttributeN() const
Get the number of attributes.
TypeId GetParent() const
Get the parent of this TypeId.
TypeId::AttributeInformation GetAttribute(std::size_t i) const
Get Attribute information by index.
std::string GetName() const
Get the name.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
bool SetDefaultFailSafe(std::string fullName, const AttributeValue &value)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void cell_data_function_col_1_config_default(GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
This function writes data in the second column, this data is going to be editable if it is a NODE_ATT...
gboolean cell_tooltip_callback(GtkWidget *widget, gint x, gint y, gboolean keyboard_tip, GtkTooltip *tooltip, gpointer user_data)
This function displays the tooltip for an object, pointer, vector item or an attribute.
gboolean clean_model_callback(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
Delete the tree model contents.
void cell_data_function_col_0_config_default(GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
This function writes the attribute or typeid name in the column 0.
void cell_data_function_col_1(GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
This function includes the name of the attribute or the editable value in the second column.
void cell_edited_callback(GtkCellRendererText *cell, gchar *path_string, gchar *new_text, gpointer user_data)
This is the callback called when the value of an attribute is changed.
void save_clicked_attribute(GtkButton *button, gpointer user_data)
This is the action done when the user presses on the save button for the Attributes.
gboolean cell_tooltip_callback_config_default(GtkWidget *widget, gint x, gint y, gboolean keyboard_tip, GtkTooltip *tooltip, gpointer user_data)
This function is used to display a tooltip whenever the user puts the mouse over a type ID or an attr...
gboolean delete_event_callback(GtkWidget *widget, GdkEvent *event, gpointer user_data)
Exit the application.
void exit_clicked_callback(GtkButton *button, gpointer user_data)
Exit the window when exit button is pressed.
GtkWidget * create_view_config_default(GtkTreeStore *model)
This is the main view opening the widget, getting tooltips and drawing the tree of attributes.
gboolean clean_model_callback_config_default(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
Delete the tree model contents.
int get_col_number_from_tree_view_column(GtkTreeViewColumn *col)
This function gets the column number 0 or 1 from the mouse click.
GtkWidget * create_view(GtkTreeStore *model)
This is the main view opening the widget, getting tooltips and drawing the tree of attributes....
void cell_data_function_col_0(GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
This function includes the name of the object, pointer, vector or vector item in the first column.
void cell_edited_callback_config_default(GtkCellRendererText *cell, gchar *path_string, gchar *new_text, gpointer user_data)
This functions is called whenever there is a change in the value of an attribute If the input value i...
void save_clicked_default(GtkButton *button, gpointer user_data)
This is the action done when the user presses on the save button for the Default attributes.
void load_clicked_default(GtkButton *button, gpointer user_data)
If the user presses the button load, it will load the config file into memory for the Default attribu...
void load_clicked_attribute(GtkButton *button, gpointer user_data)
If the user presses the button load, it will load the config file into memory for the Attributes.
A class used in the implementation of the GtkConfigStore.
enum ns3::ModelNode::@1 type
node type structure
Ptr< Object > object
the object
std::string name
node name
A class used in the implementation of the GtkConfigStore.
uint32_t index
stores the index of the attribute in list of attributes for a given TypeId
TypeId tid
The TypeId object and if it is an attribute, it's the TypeId object of the attribute.
enum ns3::ModelTypeid::@3 type
Whether the node represents an attribute or TypeId.
std::string defaultValue
TypeId default value.
std::string name
TypeId name.