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

一、分享下自已学习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.左侧的部分还没有完善,今天就到这里,明天继续更新

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值