(二)、学习Linux下C语言 GTK  UI框架(2)

    技术2022-07-11  72

    一、分享下自已学习Linux下C语言 GTK  UI框架的成长记录 2

    1.上次忘记贴CMakeLists.txt文件附上(注意用的是gtk+-2.0,版本高了有的方法没有)

    cmake_minimum_required(VERSION 3.16) project(Reader_Manager C) set(CMAKE_CXX_STANDARD 11) find_package (PkgConfig REQUIRED) pkg_check_modules (GTK2 REQUIRED gtk+-2.0) include_directories (${GTK2_INCLUDE_DIRS}) link_directories (${GTK2_LIBRARY_DIRS}) add_definitions (${GTK2_CFLAGS_OTHER}) #set(CMAKE_C_STANDARD 99) add_executable(Reader_Manager Header/interface.h Source/interface.c Header/callbacks.h Source/callbacks.c main.c Header/menuItem.h Source/menuItem.c Source/toolbarItem.c Header/toolbarItem.h Header/statusBar.h Source/statusBar.c Source/mainContainer.c Header/mainContainer.h Header/leftContainer.h Header/rightContainer.h Source/leftContainer.c Source/rightContainer.c Source/ico.c Header/ico.h ) target_link_libraries (Reader_Manager ${GTK2_LIBRARIES})

    2.主要完成了菜单栏和工具局

    3.菜单栏更新Header/menuItem.h

    // // Created by asus on 2020/6/30. // #ifndef READER_MANAGER_MENUITEM_H #define READER_MANAGER_MENUITEM_H #include <gtk/gtk.h> void itemPressed(GtkMenuItem *menuItem, gpointer data); void createMenu(GtkMenuItem *vbox); GtkWidget* createFileMenuItem(); GtkWidget* createReaderParamsSettingMenuItem(); GtkWidget* createOtherOerationMenuItem(); GtkWidget* createCommParamsSettingMenuItem(); GtkWidget* createLanguageSettingMenuItem(); GtkWidget* createHelpMenuItem(); #endif //READER_MANAGER_MENUITEM_H

    4.菜单栏更新Source/menuItem.c

    #include "../Header/menuItem.h" void itemPressed(GtkMenuItem *menuItem, gpointer data); GtkWidget* createFileMenuItem(); GtkWidget* createReaderParamsSettingMenuItem(); GtkWidget* createOtherOerationMenuItem(); GtkWidget* createCommParamsSettingMenuItem(); GtkWidget* createLanguageSettingMenuItem(); GtkWidget* createHelpMenuItem(); void createMenu(GtkMenuItem *vbox){ GtkWidget *menubar; GtkWidget *menubarBox; menubar = gtk_menu_bar_new(); gtk_menu_bar_append(menubar, createFileMenuItem()); gtk_menu_bar_append(menubar, createReaderParamsSettingMenuItem()); gtk_menu_bar_append(menubar, createOtherOerationMenuItem()); gtk_menu_bar_append(menubar, createCommParamsSettingMenuItem()); gtk_menu_bar_append(menubar, createLanguageSettingMenuItem()); gtk_menu_bar_append(menubar, createHelpMenuItem()); menubarBox = gtk_handle_box_new(); gtk_container_add(GTK_CONTAINER(menubarBox), menubar); gtk_box_pack_start(GTK_BOX(vbox), menubarBox, FALSE, FALSE, 0); } GtkWidget* createFileMenuItem() { GtkWidget *rootFileItem; GtkWidget *fileMenu; GtkWidget *exportMenuItem; GtkWidget *exitMenuItem; rootFileItem = gtk_menu_item_new_with_mnemonic("_File"); fileMenu = gtk_menu_new(); exportMenuItem = gtk_menu_item_new_with_label("Export"); exitMenuItem = gtk_menu_item_new_with_label("Close"); gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), exportMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu),gtk_separator_menu_item_new()); gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), exitMenuItem); gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootFileItem), fileMenu); g_signal_connect(GTK_OBJECT(exportMenuItem), "activate", G_CALLBACK(itemPressed), "Open ...."); g_signal_connect(GTK_OBJECT(exitMenuItem), "activate", G_CALLBACK(gtk_main_quit), NULL); return rootFileItem; } GtkWidget* createReaderParamsSettingMenuItem() { GtkWidget *rootFileItem; GtkWidget *paramsMenu; GtkWidget *commModeMenu; GtkWidget *workModeMenuItem; GtkWidget *antennaSetMenuItem; GtkWidget *tagTypeMenuItem; GtkWidget *bidirectionalTagMenuItem; GtkWidget *deviceNoMenuItem; rootFileItem = gtk_menu_item_new_with_mnemonic("_Reader Params Setting"); paramsMenu = gtk_menu_new(); workModeMenuItem = gtk_menu_item_new_with_label("Work Mode"); commModeMenu = gtk_menu_item_new_with_label("Communication Mode"); antennaSetMenuItem = gtk_menu_item_new_with_label("Antenna Set"); tagTypeMenuItem = gtk_menu_item_new_with_label("Tag Type"); bidirectionalTagMenuItem = gtk_menu_item_new_with_label("Bidirectional Tag Param Config"); deviceNoMenuItem = gtk_menu_item_new_with_label("Device No"); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), workModeMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), commModeMenu); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), antennaSetMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), tagTypeMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), bidirectionalTagMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), deviceNoMenuItem); gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootFileItem), paramsMenu); return rootFileItem; } GtkWidget* createOtherOerationMenuItem(){ GtkWidget *rootFileItem; GtkWidget *paramsMenu; GtkWidget *buzzerVoiceMenuItem; GtkWidget *ledLampMenu; GtkWidget *relayControlMenuItem; GtkWidget *firmwareUpdateMenuItem; GtkWidget *tagInfoOutputMenuItem; GtkWidget *factoryDataResetMenuItem; GtkWidget *softwareResetMenuItem; GtkWidget *deviceConfigInfoMenuItem; rootFileItem = gtk_menu_item_new_with_mnemonic("_Other Operation"); paramsMenu = gtk_menu_new(); buzzerVoiceMenuItem = gtk_menu_item_new_with_label("Buzzer Voice"); ledLampMenu = gtk_menu_item_new_with_label("LED Lamp"); relayControlMenuItem = gtk_menu_item_new_with_label("Relay Control"); firmwareUpdateMenuItem = gtk_menu_item_new_with_label("Firware Update"); tagInfoOutputMenuItem = gtk_menu_item_new_with_label("Tag Info Output"); factoryDataResetMenuItem = gtk_menu_item_new_with_label("Factory Setting"); softwareResetMenuItem = gtk_menu_item_new_with_label("Reset"); deviceConfigInfoMenuItem = gtk_menu_item_new_with_label("Device Config Info"); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), buzzerVoiceMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), ledLampMenu); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), relayControlMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), firmwareUpdateMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), tagInfoOutputMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), factoryDataResetMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), softwareResetMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), deviceConfigInfoMenuItem); gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootFileItem), paramsMenu); return rootFileItem; } GtkWidget* createCommParamsSettingMenuItem(){ GtkWidget *rootFileItem; GtkWidget *paramsMenu; GtkWidget *wifiParamsSetMenu; GtkWidget *networkParamsSetMenuItem; GtkWidget *GPSConfigMenuItem; GtkWidget *HTTPConfigMenuItem; GtkWidget *TCPConfigMenuItem; rootFileItem = gtk_menu_item_new_with_mnemonic("_Communication Params Setting"); paramsMenu = gtk_menu_new(); networkParamsSetMenuItem = gtk_menu_item_new_with_label("Network Params Setting"); wifiParamsSetMenu = gtk_menu_item_new_with_label("Wifi Config"); GPSConfigMenuItem = gtk_menu_item_new_with_label("GPS Config"); HTTPConfigMenuItem = gtk_menu_item_new_with_label("HTTP Config"); TCPConfigMenuItem = gtk_menu_item_new_with_label("TCP Config"); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), networkParamsSetMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), wifiParamsSetMenu); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), GPSConfigMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), HTTPConfigMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), TCPConfigMenuItem); gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootFileItem), paramsMenu); return rootFileItem; } GtkWidget* createLanguageSettingMenuItem(){ GtkWidget *rootFileItem; GtkWidget *paramsMenu; GtkWidget *chineseMenu; GtkWidget *englistMenuItem; rootFileItem = gtk_menu_item_new_with_mnemonic("_Language Setting"); paramsMenu = gtk_menu_new(); englistMenuItem = gtk_menu_item_new_with_label("Englist(英语)"); chineseMenu = gtk_menu_item_new_with_label("Chinese(中文)"); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), englistMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), chineseMenu); gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootFileItem), paramsMenu); return rootFileItem; } GtkWidget* createHelpMenuItem(){ GtkWidget *rootFileItem; GtkWidget *paramsMenu; GtkWidget *aboutMenuItem; rootFileItem = gtk_menu_item_new_with_mnemonic("_Help"); paramsMenu = gtk_menu_new(); aboutMenuItem = gtk_menu_item_new_with_label("About"); gtk_menu_shell_append(GTK_MENU_SHELL(paramsMenu), aboutMenuItem); gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootFileItem), paramsMenu); return rootFileItem; } void itemPressed(GtkMenuItem *menuItem, gpointer data) { g_print("%s\n", data); }

    5.工具栏更新Header/toolbarItem.h

    #ifndef READER_MANAGER_TOOLBARITEM_H #define READER_MANAGER_TOOLBARITEM_H #include <gtk/gtk.h> #include "ico.h" void createToolbar(GtkMenuItem *vbox); GtkToolItem* createToolItem(gchar *stock_id, gchar *text,char *image); #endif //READER_MANAGER_TOOLBARITEM_H

    6.工具栏更新Source/toolbarItem.c

    #include "../Header/toolbarItem.h" GtkToolItem* createToolItem(gchar *stock_id, gchar *text,char *image); void createToolbar(GtkMenuItem *vbox){ GtkWidget *toolbar; GtkWidget *toolbarBox; toolbar = gtk_toolbar_new(); GtkWidget *sep; GtkWidget *sep2; GtkWidget *sep3; GtkWidget *sep4; int index = 0; //gtk_menu_bar_append gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_OPEN, "Start",icoStart), index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Stop",icoStop), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Clear",icoClear), ++index); sep = gtk_separator_tool_item_new(); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), sep, ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Network Config",icoNetwork), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Wifi Config",icoWifiConfig), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "GPS Config",icoGPSConfig), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Http Config",icoHTTPConfig), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "TCP Config",icoTCPConfig), ++index); sep2 = gtk_separator_tool_item_new(); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), sep2, ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Work Mode",icoWorkMode), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Comm Mode",icoCommunicationMode), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Antenna CTL",icoAntennaSet), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Tag Type",icoTagType), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Tag CTL",icoDoubleTag), ++index); sep3 = gtk_separator_tool_item_new(); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), sep3, ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Device No",icoDeviceNo), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Buzzer CTL",icoBuzzer), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "LED CTL",icoLEDLamp), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Relay CTL",icoRelay), ++index); sep4 = gtk_separator_tool_item_new(); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), sep4, ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "FM Update",icoFirmwareUpdate), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Info Output",icoTagInfoOutput), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Factory Setting",icoFactorySet), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "SW Reset",icoReset), ++index); gtk_toolbar_insert(GTK_TOOLBAR(toolbar),createToolItem(GTK_STOCK_SAVE, "Device Info",icoDeviceInfo), ++index); int type; type = 0; if(type == 0){ //Fix gtk_container_set_border_width(GTK_CONTAINER(toolbar), 2); gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 5); }else{ //Move toolbarBox = gtk_handle_box_new(); gtk_container_add(GTK_CONTAINER(toolbarBox), toolbar); gtk_box_pack_start(GTK_BOX(vbox), toolbarBox, FALSE, FALSE, 0); } } // 建立一個內含按鈕、文字與圖片的GtkToolItem GtkToolItem* createToolItem(gchar *stock_id, gchar *text,char *ico) { GtkToolItem *open; GtkWidget *box; GtkWidget *label; GtkWidget *image; GtkWidget *button; open = gtk_tool_item_new(); gtk_tool_item_set_tooltip_text(open, "Open File.."); box = gtk_vbox_new(FALSE, 0); //image = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_SMALL_TOOLBAR); //gtk_table_attach_defaults(GTK_TABLE(table), image, 0, 1, 1, 2); image = gtk_image_new_from_file(ico); label = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); button = gtk_button_new(); gtk_container_add(GTK_CONTAINER(button), box); gtk_container_add(GTK_CONTAINER(open), button); return open; }

    7.工具栏增加图标Header/ice.h

    #ifndef READER_MANAGER_ICO_H #define READER_MANAGER_ICO_H char icoStart[100]; char icoStop[100]; char icoClear[100]; char icoNetwork[100]; char icoWifiConfig[100]; char icoGPSConfig[100]; char icoTCPConfig[100]; char icoHTTPConfig[100]; char icoWorkMode[100]; char icoCommunicationMode[100]; char icoAntennaSet[100]; char icoTagType[100]; char icoDoubleTag[100]; char icoDeviceNo[100]; char icoBuzzer[100]; char icoLEDLamp[100]; char icoRelay[100]; char icoFirmwareUpdate[100]; char icoTagInfoOutput[100]; char icoFactorySet[100]; char icoReset[100]; char icoDeviceInfo[100]; #endif //READER_MANAGER_ICO_H

     

    8.工具栏增加图标Source/ice.c

    char icoStart[100] = {"../ico/play_fill.png"}; char icoStop[100] = {"../ico/stop.png"}; char icoClear[100] = {"../ico/clear.png"}; char icoNetwork[100] = {"../ico/network_settings.png"}; char icoWifiConfig[100] = {"../ico/wifi.png"}; char icoGPSConfig[100] = {"../ico/gps.png"}; char icoTCPConfig[100] = {"../ico/server.png"}; char icoHTTPConfig[100] = {"../ico/http.png"}; char icoWorkMode[100] = {"../ico/operation.png"}; char icoCommunicationMode[100] = {"../ico/interface_management.png"}; char icoAntennaSet[100] = {"../ico/si_glyph_antenna_1.png"}; char icoTagType[100] = {"../ico/48_tags_06.png"}; char icoDoubleTag[100] = {"../ico/double_tag.png"}; char icoDeviceNo[100] = {"../ico/equipment.png"}; char icoBuzzer[100] = {"../ico/notification_fill.png"}; char icoLEDLamp[100] = {"../ico/led.png"}; char icoRelay[100] = {"../ico/relays.png"}; char icoFirmwareUpdate[100] = {"../ico/upgrade.png"}; char icoTagInfoOutput[100] = {"../ico/output.png"}; char icoFactorySet[100] = {"../ico/factory_setting.png"}; char icoReset[100] = {"../ico/reset.png"}; char icoDeviceInfo[100] = {"../ico/device_info.png"};

    9.左侧的部分还没有完善,今天就到这里,明天继续更新

     

    Processed: 0.009, SQL: 9