static GtkWidget* find_widget(GtkWidget* parent, const gchar* name, int depth) { // printf("%*.*c%s\n", depth, depth, ' ', gtk_widget_get_name(parent)); GtkWidget *widget = NULL; if (g_strcasecmp(gtk_widget_get_name(parent), name) == 0) { return parent; } if (GTK_IS_BIN(parent)) { return find_widget(gtk_bin_get_child(GTK_BIN(parent)), name, depth + 1); } if (GTK_IS_CONTAINER(parent)) { GList *list = gtk_container_get_children(GTK_CONTAINER(parent)); for (GList *node = list; node; node = node->next) { widget = find_widget(GTK_WIDGET(node->data), name, depth + 1); if (widget) { break; } } g_list_free(list); } return widget; }
static void raise_widget(mvp_widget_t *widget, mvp_widget_t *top) { int wid; if (widget) { if (top == NULL) { wid = GrGetFocus(); top = find_widget(wid); } if (top == widget) return; if (widget->below) widget->below->above = widget->above; if (widget->above) widget->above->below = widget->below; widget->below = top; widget->above = NULL; if (top) { top->above = widget; } GrSetFocus(widget->wid); } }
void menu_init(void) { GtkMenuShell *shell = GTK_MENU_SHELL(geany->main_widgets->editor_menu); GList *children = gtk_container_get_children(GTK_CONTAINER(shell)); GtkWidget *search2 = find_widget(shell, "search2"); block_execute = FALSE; active_menu = NULL; input = NULL; popup_item = get_widget("popup_item"); menu_connect("popup_menu", &popup_menu_info, NULL); g_signal_connect(get_widget("popup_evaluate"), "button-release-event", G_CALLBACK(on_popup_evaluate_button_release), geany->main_widgets->editor_menu); if (search2) gtk_menu_shell_insert(shell, popup_item, g_list_index(children, search2) + 1); else gtk_menu_shell_append(shell, popup_item); modify_dialog = dialog_connect("modify_dialog"); modify_value_label = GTK_LABEL(get_widget("modify_value_label")); modify_value = get_widget("modify_value"); modify_text = gtk_text_view_get_buffer(GTK_TEXT_VIEW(modify_value)); modify_ok = get_widget("modify_ok"); utils_enter_to_clicked(modify_value, modify_ok); }
void FileDialog::AddChildGTK(wxWindowGTK* child) { // allow dialog to be resized smaller horizontally gtk_widget_set_size_request( child->m_widget, child->GetMinWidth(), child->m_height); // In GTK 3+, adding our container as the extra widget can cause the // the filter combo to grow to the same height as our container. This // makes for a very odd looking filter combo. So, we manually add our // container below the action bar. #if GTK_CHECK_VERSION(3,0,0) GtkWidget *actionbar = find_widget(m_widget, "GtkActionBar", 0); if (actionbar) { GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(vbox), child->m_widget); gtk_box_set_child_packing(GTK_BOX(vbox), child->m_widget, TRUE, TRUE, 0, GTK_PACK_START); gtk_widget_show(vbox); GtkWidget *abparent = gtk_widget_get_parent(actionbar); gtk_container_add(GTK_CONTAINER(abparent), vbox); gtk_box_set_child_packing(GTK_BOX(abparent), vbox, FALSE, FALSE, 0, GTK_PACK_END); gtk_box_reorder_child(GTK_BOX(abparent), actionbar, -2); } #else gtk_file_chooser_set_extra_widget( GTK_FILE_CHOOSER(m_widget), child->m_widget); #endif }
/** * Gets the value of a widget on the current dialog. * - Args 1..n: path of strings and integers. * - Ret 1: scalar. */ int intf_get_dialog_value(lua_State *L) { gui2::twidget *w = find_widget(L, 1, true); #ifdef GUI2_EXPERIMENTAL_LISTBOX if (gui2::tlist *l = dynamic_cast<gui2::tlist *>(w)) #else if (gui2::tlistbox *l = dynamic_cast<gui2::tlistbox *>(w)) #endif { lua_pushinteger(L, l->get_selected_row() + 1); } else if (gui2::tmulti_page *l = dynamic_cast<gui2::tmulti_page *>(w)) { lua_pushinteger(L, l->get_selected_page() + 1); } else if (gui2::tselectable_ *s = dynamic_cast<gui2::tselectable_ *>(w)) { lua_pushboolean(L, s->get_value()); } else if (gui2::ttext_box *t = dynamic_cast<gui2::ttext_box *>(w)) { lua_pushstring(L, t->get_value().c_str()); } else if (gui2::tslider *s = dynamic_cast<gui2::tslider *>(w)) { lua_pushinteger(L, s->get_value()); } else if (gui2::tprogress_bar *p = dynamic_cast<gui2::tprogress_bar *>(w)) { lua_pushinteger(L, p->get_percentage()); } else if (gui2::ttree_view *tv = dynamic_cast<gui2::ttree_view *>(w)) { std::vector<int> path = tv->selected_item()->describe_path(); lua_createtable(L, path.size(), 0); for(size_t i =0; i < path.size(); ++i) { lua_pushinteger(L, path[i] + 1); lua_rawseti(L, -2, i + 1); } } else return luaL_argerror(L, lua_gettop(L), "unsupported widget"); return 1; }
/** * Sets a callback on a widget of the current dialog. * - Arg 1: function. * - Args 2..n: path of strings and integers. */ int intf_set_dialog_callback(lua_State *L) { gui2::twidget *w = find_widget(L, 2, true); scoped_dialog::callback_map &m = scoped_dialog::current->callbacks; scoped_dialog::callback_map::iterator i = m.find(w); if (i != m.end()) { lua_pushstring(L , dlgclbkKey); lua_rawget(L, LUA_REGISTRYINDEX); lua_pushnil(L); lua_rawseti(L, -2, i->second); lua_pop(L, 1); m.erase(i); } if (lua_isnil(L, 1)) return 0; if (gui2::tclickable_ *c = dynamic_cast<gui2::tclickable_ *>(w)) { static tdialog_callback_wrapper wrapper; c->connect_click_handler(boost::bind( &tdialog_callback_wrapper::forward , wrapper , w)); } else if (gui2::tselectable_ *s = dynamic_cast<gui2::tselectable_ *>(w)) { s->set_callback_state_change(&dialog_callback); } #ifdef GUI2_EXPERIMENTAL_LISTBOX else if (gui2::tlist *l = dynamic_cast<gui2::tlist *>(w)) { static tdialog_callback_wrapper wrapper; connect_signal_notify_modified(*l , boost::bind( &tdialog_callback_wrapper::forward , wrapper , w)); } #else else if (gui2::tlistbox *l = dynamic_cast<gui2::tlistbox *>(w)) { l->set_callback_value_change(&dialog_callback); } #endif else if (gui2::ttree_view *tv = dynamic_cast<gui2::ttree_view *>(w)) { tv->set_selection_change_callback(&dialog_callback); } else return luaL_argerror(L, lua_gettop(L), "unsupported widget"); lua_pushstring(L , dlgclbkKey); lua_rawget(L, LUA_REGISTRYINDEX); int n = lua_rawlen(L, -1) + 1; m[w] = n; lua_pushvalue(L, 1); lua_rawseti(L, -2, n); lua_pop(L, 1); return 0; }
mvp_widget_t* mvpw_get_focus(void) { int wid; wid = GrGetFocus(); return find_widget(wid); }
const T* find_widget(const std::string& id, const bool must_be_active, const bool must_exist) const { const T* widget = dynamic_cast<const T*>(find_widget(id, must_be_active)); VALIDATE(!must_exist || widget, missing_widget(id)); return widget; }
/** * Sets a widget's state to active or inactive * - Arg 1: boolean. * - Args 2..n: path of strings and integers. */ int intf_set_dialog_active(lua_State *L) { const bool b = luaW_toboolean(L, 1); gui2::twidget *w = find_widget(L, 2, true); gui2::tcontrol *c = dynamic_cast<gui2::tcontrol *>(w); if (!c) return luaL_argerror(L, lua_gettop(L), "unsupported widget"); c->set_active(b); return 0; }
static gboolean toggle_buddylist(GntBindable *bindable, GList *null) { GntWM *wm = GNT_WM(bindable); GntWidget *blist = find_widget(wm, "buddylist"); if (blist) gnt_widget_destroy(blist); else purple_blist_show(); return TRUE; }
static void exposure(GR_EVENT_EXPOSURE *exposure) { mvp_widget_t *widget; if ((widget=find_widget(exposure->wid)) == NULL) { printf("expose on unknown wid %d\n", exposure->wid); return; } if (widget->callback_expose) widget->callback_expose(widget); if (widget->expose) widget->expose(widget); }
/** * Sets a canvas on a widget of the current dialog. * - Arg 1: integer. * - Arg 2: WML table. * - Args 3..n: path of strings and integers. */ int intf_set_dialog_canvas(lua_State *L) { int i = luaL_checkinteger(L, 1); gui2::twidget *w = find_widget(L, 3, true); gui2::tcontrol *c = dynamic_cast<gui2::tcontrol *>(w); if (!c) return luaL_argerror(L, lua_gettop(L), "unsupported widget"); std::vector<gui2::tcanvas> &cv = c->canvas(); if (i < 1 || unsigned(i) > cv.size()) return luaL_argerror(L, 1, "out of bounds"); config cfg = luaW_checkconfig(L, 2); cv[i - 1].set_cfg(cfg); return 0; }
static void keystroke(GR_EVENT_KEYSTROKE *key) { mvp_widget_t *widget; if (keystroke_callback) keystroke_callback(key->ch); if ((widget=find_widget(key->wid)) == NULL) return; if (widget->callback_key) widget->callback_key(widget, key->ch); if (widget->key) widget->key(widget, key->ch); }
static void timer(GR_EVENT_TIMER *timer) { mvp_widget_t *widget; if ((widget=find_widget(timer->wid)) == NULL) return; if (widget->tid != timer->tid) return; if (widget->callback_timer) widget->callback_timer(widget); if (widget->timer) widget->timer(widget); }
int intf_add_dialog_tree_node(lua_State *L) { const std::string node_type = luaL_checkstring(L, 1); const int insert_pos = luaL_checkinteger(L, 2); static const std::map<std::string, string_map> data; gui2::twidget *w = find_widget(L, 3, false); gui2::ttree_view_node *twn = dynamic_cast<gui2::ttree_view_node *>(w); if (!twn) { if(gui2::ttree_view* tw = dynamic_cast<gui2::ttree_view *>(w)) { twn = &tw->get_root_node(); } else { return luaL_argerror(L, lua_gettop(L), "unsupported widget"); } } twn->add_child(node_type, data, insert_pos); return 0; }
/** * Sets the visiblity of a widget in the current dialog. * - Arg 1: boolean. * - Args 2..n: path of strings and integers. */ int intf_set_dialog_visible(lua_State *L) { typedef gui2::tcontrol::tvisible tvisible; tvisible::scoped_enum flag = tvisible::visible; switch (lua_type(L, 1)) { case LUA_TBOOLEAN: flag = bool(lua_toboolean(L, 1)) ? tvisible::visible : tvisible::invisible; break; case LUA_TSTRING: { const std::string& str = lua_tostring(L, 1); if(str == "visible") { flag = tvisible::visible; } else if(str == "hidden") { flag = tvisible::hidden; } else if(str == "invisible") { flag = tvisible::invisible; } else { return luaL_argerror(L, 1, "string must be one of: visible, hidden, invisible"); } } break; default: return luaL_typerror(L, 1, "boolean or string"); } gui2::twidget *w = find_widget(L, 2, true); gui2::tcontrol *c = dynamic_cast<gui2::tcontrol *>(w); if (!c) return luaL_argerror(L, lua_gettop(L), "unsupported widget"); c->set_visible(flag); if(flag == tvisible::hidden) { // HACK: this is needed to force the widget to be repainted immediately // to get rid of its ghost image. scoped_dialog::current->window->invalidate_layout(); } return 0; }
void NewLayerCommand::onExecute(Context* context) { ActiveDocumentWriter document(context); Sprite* sprite(document->getSprite()); std::string name; // Default name (m_name is a name specified in params) if (!m_name.empty()) name = m_name; else name = get_unique_layer_name(sprite); // If params specify to ask the user about the name... if (m_ask) { // We open the window to ask the name FramePtr window(load_widget("new_layer.xml", "new_layer")); JWidget name_widget = find_widget(window, "name"); name_widget->setText(name.c_str()); jwidget_set_min_size(name_widget, 128, 0); window->open_window_fg(); if (window->get_killer() != window->findChild("ok")) return; name = window->findChild("name")->getText(); } Layer* layer; { UndoTransaction undoTransaction(document, "New Layer"); layer = undoTransaction.newLayer(); undoTransaction.commit(); } layer->setName(name); update_screen_for_document(document); app_get_statusbar()->invalidate(); app_get_statusbar()->showTip(1000, "Layer `%s' created", name.c_str()); }
//------------------------------------------------------------------------- bool py_idaview_t::Bind(PyObject *self) { // Already a py_idaview_t associated to this object? py_idaview_t *_this = view_extract_this<py_idaview_t>(self); if ( _this != NULL ) return false; qstring title; if ( !PyW_GetStringAttr(self, S_M_TITLE, &title) ) return false; // Get the IDAView associated to this TWidget TWidget *widget = find_widget(title.c_str()); if ( widget == NULL ) return false; // Get unique py_idaview_t associated to that TWidget py_idaview_t *py_view; if ( !pycim_lookup_info.find_by_view((py_customidamemo_t**) &py_view, widget) ) { py_view = new py_idaview_t(); lookup_entry_t &e = pycim_lookup_info.new_entry(py_view); pycim_lookup_info.commit(e, widget); } // Finally, bind: // py_idaview_t <=> IDAViewWrapper // py_idaview_t => TWidget bool ok = py_view->bind(self, widget); if ( ok ) { ok = py_view->collect_pyobject_callbacks(self); if ( !ok ) delete py_view; } return ok; }
static GtkWidget * find_widget_at_pointer (GdkDevice *device) { GtkWidget *widget = NULL; GdkWindow *pointer_window; gint x, y; FindWidgetData data; pointer_window = gdk_device_get_window_at_position (device, NULL, NULL); if (pointer_window) { gpointer widget_ptr; gdk_window_get_user_data (pointer_window, &widget_ptr); widget = widget_ptr; } if (widget) { gdk_window_get_device_position (gtk_widget_get_window (widget), device, &x, &y, NULL); data.x = x; data.y = y; data.found = FALSE; data.first = TRUE; find_widget (widget, &data); if (data.found) return data.res_widget; return widget; } return NULL; }
/** * Removes an entry from a list. * - Arg 1: number, index of the element to delete. * - Arg 2: number, number of the elements to delete. (0 to delete all elements after index) * - Args 2..n: path of strings and integers. */ int intf_remove_dialog_item(lua_State *L) { int pos = luaL_checkinteger(L, 1) - 1; int number = luaL_checkinteger(L, 2); gui2::twidget *w = find_widget(L, 3, true); #ifdef GUI2_EXPERIMENTAL_LISTBOX if (gui2::tlist *l = dynamic_cast<gui2::tlist *>(w)) #else if (gui2::tlistbox *l = dynamic_cast<gui2::tlistbox *>(w)) #endif { l->remove_row(pos, number); } else if (gui2::tmulti_page *l = dynamic_cast<gui2::tmulti_page *>(w)) { l->remove_page(pos, number); } else if (gui2::ttree_view *tv = dynamic_cast<gui2::ttree_view *>(w)) { remove_treeview_node(tv->get_root_node(), pos, number); } else if (gui2::ttree_view_node *tvn = dynamic_cast<gui2::ttree_view_node *>(w)) { remove_treeview_node(*tvn, pos, number); } else return luaL_argerror(L, lua_gettop(L), "unsupported widget"); return 1; }
TWidget *get_widget() { return find_widget(chobj->title); }
/** * Sets a widget to have the focus * - Args 1..n: path of strings and integers. */ int intf_set_dialog_focus(lua_State *L) { gui2::twidget *w = find_widget(L, 1, true); scoped_dialog::current->window->keyboard_capture(w); return 0; }
const T& get_widget(const std::string& id, const bool must_be_active) const { const T* result = dynamic_cast<const T*>(find_widget(id, must_be_active)); VALIDATE(result, missing_widget(id)); return *result; }
void plugin_init(G_GNUC_UNUSED GeanyData *gdata) { GeanyKeyGroup *scope_key_group; char *gladefile = g_build_filename(PLUGINDATADIR, "scope.glade", NULL); GError *gerror = NULL; GtkWidget *menubar1 = find_widget(geany->main_widgets->window, "menubar1"); guint item; const MenuKey *menu_key = debug_menu_keys; ToolItem *tool_item = toolbar_items; const ScopeCallback *scb; main_locale_init(LOCALEDIR, GETTEXT_PACKAGE); scope_key_group = plugin_set_key_group(geany_plugin, "scope", COUNT_KB, NULL); builder = gtk_builder_new(); gtk_builder_set_translation_domain(builder, GETTEXT_PACKAGE); scp_tree_store_register_dynamic(); if (!gtk_builder_add_from_file(builder, gladefile, &gerror)) { msgwin_status_add(_("Scope: %s."), gerror->message); g_warning(_("Scope: %s."), gerror->message); g_error_free(gerror); g_object_unref(builder); builder = NULL; } g_free(gladefile); if (!builder) return; /* interface */ #ifndef G_OS_UNIX gtk_widget_hide(get_widget("terminal_show")); #endif debug_item = get_widget("debug_item"); if (menubar1) gtk_menu_shell_insert(GTK_MENU_SHELL(menubar1), debug_item, DEBUG_MENU_ITEM_POS); else gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu), debug_item); menu_connect("debug_menu", &debug_menu_info, NULL); ui_add_document_sensitive(get_widget("scope_reset_markers")); ui_add_document_sensitive(get_widget("scope_cleanup_files")); for (item = 0; item < EVALUATE_KB; item++, menu_key++) { keybindings_set_item(scope_key_group, item, on_scope_key, 0, 0, menu_key->name, _(menu_key->label), debug_menu_items[item].widget); } geany_statusbar = GTK_STATUSBAR(gtk_widget_get_parent(geany->main_widgets->progressbar)); debug_statusbar = get_widget("debug_statusbar"); debug_state_label = GTK_LABEL(get_widget("debug_state_label")); gtk_box_pack_end(GTK_BOX(geany_statusbar), debug_statusbar, FALSE, FALSE, 0); debug_panel = get_widget("debug_panel"); gtk_notebook_append_page(GTK_NOTEBOOK(geany->main_widgets->message_window_notebook), debug_panel, get_widget("debug_label")); /* startup */ gtk216_init(); program_init(); prefs_init(); conterm_init(); inspect_init(); register_init(); parse_init(); debug_init(); views_init(); thread_init(); break_init(); watch_init(); stack_init(); local_init(); memory_init(); menu_init(); menu_set_popup_keybindings(scope_key_group, item); for (item = 0; tool_item->index != -1; item++, tool_item++) { GtkMenuItem *menu_item = GTK_MENU_ITEM(debug_menu_items[tool_item->index].widget); GtkToolItem *button = gtk_tool_button_new(NULL, gtk_menu_item_get_label(menu_item)); gtk_tool_button_set_use_underline(GTK_TOOL_BUTTON(button), gtk_menu_item_get_use_underline(menu_item)); g_signal_connect(button, "clicked", G_CALLBACK(on_toolbar_button_clicked), GINT_TO_POINTER(tool_item->index)); g_signal_connect(button, "toolbar-reconfigured", G_CALLBACK(on_toolbar_reconfigured), tool_item); tool_item->widget = GTK_WIDGET(button); plugin_add_toolbar_item(geany_plugin, button); } toolbar_update_state(DS_INACTIVE); views_update_state(DS_INACTIVE); configure_toolbar(); g_signal_connect(debug_panel, "switch-page", G_CALLBACK(on_view_changed), NULL); for (scb = scope_callbacks; scb->name; scb++) plugin_signal_connect(geany_plugin, NULL, scb->name, FALSE, scb->callback, NULL); }
/** * Sets the value of a widget on the current dialog. * - Arg 1: scalar. * - Args 2..n: path of strings and integers. */ int intf_set_dialog_value(lua_State *L) { gui2::twidget *w = find_widget(L, 2, false); #ifdef GUI2_EXPERIMENTAL_LISTBOX if (gui2::tlist *l = dynamic_cast<gui2::tlist *>(w)) #else if (gui2::tlistbox *l = dynamic_cast<gui2::tlistbox *>(w)) #endif { int v = luaL_checkinteger(L, 1); int n = l->get_item_count(); if (1 <= v && v <= n) l->select_row(v - 1); else return luaL_argerror(L, 1, "out of bounds"); } else if (gui2::tmulti_page *l = dynamic_cast<gui2::tmulti_page *>(w)) { int v = luaL_checkinteger(L, 1); int n = l->get_page_count(); if (1 <= v && v <= n) l->select_page(v - 1); else return luaL_argerror(L, 1, "out of bounds"); } else if (gui2::tselectable_ *s = dynamic_cast<gui2::tselectable_ *>(w)) { s->set_value(luaW_toboolean(L, 1)); } else if (gui2::ttext_box *t = dynamic_cast<gui2::ttext_box *>(w)) { const t_string& text = luaW_checktstring(L, 1); t->set_value(text.str()); } else if (gui2::tslider *s = dynamic_cast<gui2::tslider *>(w)) { const int v = luaL_checkinteger(L, 1); const int m = s->get_minimum_value(); const int n = s->get_maximum_value(); if (m <= v && v <= n) s->set_value(v); else return luaL_argerror(L, 1, "out of bounds"); } else if (gui2::tprogress_bar *p = dynamic_cast<gui2::tprogress_bar *>(w)) { const int v = luaL_checkinteger(L, 1); if (0 <= v && v <= 100) p->set_percentage(v); else return luaL_argerror(L, 1, "out of bounds"); } else { t_string v = luaW_checktstring(L, 1); gui2::tcontrol *c = dynamic_cast<gui2::tcontrol *>(w); if (!c) return luaL_argerror(L, lua_gettop(L), "unsupported widget"); c->set_label(v); } return 0; }