يمكنني استخدام التوثيق الخاص به في برنامج devhelp. لذا ، لنبدأ.
أول شيء يجب فعله هو إنشاء تطبيق يكون مرئيًا على ناقل dbus.
GtkApplication *app;
static void app_activate_cb ( GtkApplication *app, gpointer user_data ) {
}
int main ( int argc, char **argv ) {
app = gtk_application_new ( "com.xverizex.configurator", G_APPLICATION_FLAGS_NONE );
g_application_register ( ( GApplication * ) app, NULL, NULL );
g_signal_connect ( app, "activate", G_CALLBACK ( app_activate_cb ), NULL );
return g_application_run ( ( GApplication * ) app, argc, argv );
}
بعد تنشيط التطبيق ، تحتاج إلى تعبئته بالأدوات. أقوم بإنشاء هيكل في هذا الملف سيخزن جميع عناصر واجهة المستخدم التي ستتغير في المظهر إذا قمت بتحديد نظام ألوان مختلف.
هنا الهيكل:
struct widgets {
GtkWidget *main_window;
GtkWidget *notebook;
GtkWidget *tree_view_sources;
GtkWidget *label_tab_sources;
GtkWidget *header_bar;
GtkWidget *search_entry;
GtkWidget *button_add_item;
GtkWidget *tree_view_reactions;
GtkWidget *label_tab_reactions;
GtkWidget *window_add_source;
...
GtkWidget *STUBS;
في النهاية أقوم بإنشاء متغير خاص يسمى STUBS لا أخصص له أي شيء. هناك الكثير من الحاجيات في التطبيق وتحتاج إلى طريقة ما لتعيين الاسم المطلوب للحاجيات المطلوبة. هذه هي الطريقة التي أفعل بها ذلك.
static void set_theme_name ( const char *name ) {
struct widgets **p = ( struct widgets ** ) &w;
for ( int i = 0; p[i] != NULL; i++ ) {
gtk_widget_set_name ( ( GtkWidget * ) p[i], name );
}
char buf[255];
snprintf ( buf, 255, "%s_info", name );
gtk_widget_set_name ( w.label_info_db_settings, buf );
gtk_widget_set_name ( w.label_info_mail_settings, buf );
}
بالنسبة لتلك الأدوات التي لا تزال بحاجة إلى تصميم خاص ، قمت بالفعل بتعيين أسماء منفصلة لها. في هذه الوظيفة ، أتصفح جميع الأدوات المصغّرة وأعطيها اسم سمة.
يتم استخدام الكود التالي لإنشاء القائمة.
static void create_actions ( void ) {
const GActionEntry entries[] = {
{ "quit", action_activate_quit },
{ "settings", action_settings },
{ "apply_settings", action_activate_apply_settings },
{ "select_light_theme", action_activate_select_light_theme },
{ "select_dark_theme", action_activate_select_dark_theme },
{ "select_standard_theme", action_activate_select_standard_theme }
};
g_action_map_add_action_entries ( G_ACTION_MAP (app), entries, G_N_ELEMENTS (entries), NULL );
}
ثم نقوم بتعيين هذه الأوامر إلى القائمة.
pop_menu = g_menu_new ( );
GMenu *menu_app = g_menu_new ( );
GMenu *menu_themes = g_menu_new ( );
g_menu_append ( menu_app, "", "app.settings" );
g_menu_append ( menu_app, "", "app.apply_settings" );
g_menu_append ( menu_themes, " ", "app.select_light_theme" );
g_menu_append ( menu_themes, " ", "app.select_dark_theme" );
g_menu_append ( menu_themes, " ", "app.select_standard_theme" );
g_menu_append_submenu ( menu_app, " ", ( GMenuModel * ) menu_themes );
g_menu_append ( menu_app, "", "app.quit" );
gtk_application_set_app_menu ( app, ( GMenuModel * ) menu_app );
وبالنتيجة بعد التبول بهذا التطبيق يتحول إلى شيء رائع وجميل.
