Glade作为GTK3/4/5的起点(代替Gnome生成器)

Glade作为GTK3/4/5的起点(代替Gnome生成器),gtk,gtk3,gnome,glade,Gtk,Gtk3,Gnome,Glade,现在,我们已经花了一些时间来学习Gnome Builder、Glade、Vala和Genie,并考虑到优秀的Gnome人机界面指南GHIG,为什么Glade不是几乎所有GTK GUI应用程序的起点 例如,是否有任何程序将采用Glade模板xml文件并自动生成相应的编程Vala或Genie源代码?例如,如果Glade/Gnome附带的GHIG后面有标准的Gtk.ApplicationWindow Glade xml文件,那么这些文件可以快速适应特定的项目和具有自动生成信号的精灵类模板,以及完整的g

现在,我们已经花了一些时间来学习Gnome Builder、Glade、Vala和Genie,并考虑到优秀的Gnome人机界面指南GHIG,为什么Glade不是几乎所有GTK GUI应用程序的起点

例如,是否有任何程序将采用Glade模板xml文件并自动生成相应的编程Vala或Genie源代码?例如,如果Glade/Gnome附带的GHIG后面有标准的Gtk.ApplicationWindow Glade xml文件,那么这些文件可以快速适应特定的项目和具有自动生成信号的精灵类模板,以及完整的gresource/meson/flatpak结构。这将直接导入Gnome Builder作为起点。有没有做过类似的事情

更新

以下文件application.gs是使用精灵属性组合从application.ui自动生成的。我不想在这里重新发明轮子——这就是这个问题的原因。下面删除了一些字段,但实际文件已完全完成,可以使用。除了“application.ui”的内容之外,唯一需要的信息是资源路径和ui文件名。所有内容都已包含在Glade文件中

/*
  {PROJECT_SPACE}

  '{PROJECT_NAME}' is a command line tool that will parse a glade ui
  template and generate a skeleton class in the Genie language
  with composite widgets. It will generate GTKTemplate, GTKChild
  and GTKCallback entries.

  '{PROJECT_NAME}' exists within the {PROJECT_NAMESPACE} namespace.

  Copyright (C) 2018 {AUTHOR_NAME} {AUTHOR_EMAIL}

  This library is free software; you can redistribute it and or
  or modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (as you wish) a later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the:

      Free Software Foundation, Inc.
      51 Franklin Street, Fifth Floor
      Boston, MA  02110-1301
      USA

*/

[indent=4]

namespace {PROJECT_NAMESPACE}

    [GtkTemplate (ui = "{RESOURCE_URI}/application.ui")]
    class ApplicationWindow:Gtk.ApplicationWindow

        [GtkChild]
        application_grid:Gtk.Fixed

        [GtkChild]
        application_status_bar:Gtk.Statusbar

        [GtkChild]
        header_bar:Gtk.HeaderBar

        [GtkChild]
        application_button:Gtk.MenuButton

        [GtkChild]
        window_title:Gtk.Label

        [GtkChild]
        window_subtitle:Gtk.Label

        [GtkChild]
        tools_button:Gtk.MenuButton

        [GtkChild]
        application_popover:Gtk.PopoverMenu

        [GtkChild]
        home_menu:Gtk.Box

        [GtkChild]
        project_settings:Gtk.ModelButton

        [GtkChild]
        lateral_pressure:Gtk.ModelButton

        [GtkChild]
        service_life:Gtk.ModelButton

        [GtkChild]
        mixture_analysis:Gtk.ModelButton

        [GtkChild]
        general_simulation:Gtk.ModelButton

        [GtkChild]
        exit_application:Gtk.ModelButton

        [GtkChild]
        projects_menu:Gtk.Box

        [GtkChild]
        exit_projects:Gtk.ModelButton

        [GtkChild]
        new_project:Gtk.ModelButton

        [GtkChild]
        open_project:Gtk.ModelButton

        [GtkChild]
        save_project:Gtk.ModelButton

        [GtkChild]
        pressure_menu:Gtk.Box

        [GtkChild]
        exit_pressure:Gtk.ModelButton

        [GtkChild]
        boussinesq_3d:Gtk.ModelButton

        [GtkChild]
        strip_loading:Gtk.ModelButton

        [GtkChild]
        line_loading:Gtk.ModelButton

        [GtkChild]
        point_loading:Gtk.ModelButton

        [GtkChild]
        log_spiral:Gtk.ModelButton

        [GtkChild]
        service_life_menu:Gtk.Box

        [GtkChild]
        exit_service_life:Gtk.ModelButton

        [GtkChild]
        stratful_equation:Gtk.ModelButton

        [GtkChild]
        clear_equation:Gtk.ModelButton

        [GtkChild]
        relative_life:Gtk.ModelButton

        [GtkChild]
        diffusion_theory:Gtk.ModelButton

        [GtkChild]
        what_if_analysis:Gtk.ModelButton

        [GtkChild]
        mixture_analysis_menu:Gtk.Box

        [GtkChild]
        exit_mixture_analysis:Gtk.ModelButton

        [GtkChild]
        mixture_design:Gtk.ModelButton

        [GtkChild]
        volumetric_analysis:Gtk.ModelButton

        [GtkChild]
        particulate_analysis:Gtk.ModelButton

        [GtkChild]
        general_simulation_menu:Gtk.Box

        [GtkChild]
        exit_general_simulation:Gtk.ModelButton

        [GtkChild]
        construction_simulation:Gtk.ModelButton

        [GtkChild]
        mixture_simulation:Gtk.ModelButton

        [GtkChild]
        thermal_simulation:Gtk.ModelButton

        [GtkCallback]
        def on_exit_application_clicked( exit_application:Gtk.ModelButton )
            print "Signal handler 'on_exit_application_clicked' was called ..."

        [GtkCallback]
        def on_new_project_clicked( new_project:Gtk.ModelButton )
            print "Signal handler 'on_new_project_clicked' was called ..."

        [GtkCallback]
        def on_open_project_clicked( open_project:Gtk.ModelButton )
            print "Signal handler 'on_open_project_clicked' was called ..."

        [GtkCallback]
        def on_save_project_clicked( save_project:Gtk.ModelButton )
            print "Signal handler 'on_save_project_clicked' was called ..."

        [GtkCallback]
        def on_boussinesq_3d_clicked( boussinesq_3d:Gtk.ModelButton )
            print "Signal handler 'on_boussinesq_3d_clicked' was called ..."

        [GtkCallback]
        def on_strip_loading_clicked( strip_loading:Gtk.ModelButton )
            print "Signal handler 'on_strip_loading_clicked' was called ..."

        [GtkCallback]
        def on_line_loading_clicked( line_loading:Gtk.ModelButton )
            print "Signal handler 'on_line_loading_clicked' was called ..."

        [GtkCallback]
        def on_point_loading_clicked( point_loading:Gtk.ModelButton )
            print "Signal handler 'on_point_loading_clicked' was called ..."

        [GtkCallback]
        def on_log_spiral_clicked( log_spiral:Gtk.ModelButton )
            print "Signal handler 'on_log_spiral_clicked' was called ..."

        [GtkCallback]
        def on_stratful_equation_clicked( stratful_equation:Gtk.ModelButton )
            print "Signal handler 'on_stratful_equation_clicked' was called ..."

        [GtkCallback]
        def on_clear_equation_clicked( clear_equation:Gtk.ModelButton )
            print "Signal handler 'on_clear_equation_clicked' was called ..."

        [GtkCallback]
        def on_relative_life_clicked( relative_life:Gtk.ModelButton )
            print "Signal handler 'on_relative_life_clicked' was called ..."

        [GtkCallback]
        def on_diffusion_theory_clicked( diffusion_theory:Gtk.ModelButton )
            print "Signal handler 'on_diffusion_theory_clicked' was called ..."

        [GtkCallback]
        def on_what_if_analysis_clicked( what_if_analysis:Gtk.ModelButton )
            print "Signal handler 'on_what_if_analysis_clicked' was called ..."

        [GtkCallback]
        def on_mixture_design_clicked( mixture_design:Gtk.ModelButton )
            print "Signal handler 'on_mixture_design_clicked' was called ..."

        [GtkCallback]
        def on_volumetric_analysis_clicked( volumetric_analysis:Gtk.ModelButton )
            print "Signal handler 'on_volumetric_analysis_clicked' was called ..."

        [GtkCallback]
        def on_particulate_analysis_clicked( particulate_analysis:Gtk.ModelButton )
            print "Signal handler 'on_particulate_analysis_clicked' was called ..."

        [GtkCallback]
        def on_construction_simulation_clicked( construction_simulation:Gtk.ModelButton )
            print "Signal handler 'on_construction_simulation_clicked' was called ..."

        [GtkCallback]
        def on_mixture_simulation_clicked( mixture_simulation:Gtk.ModelButton )
            print "Signal handler 'on_mixture_simulation_clicked' was called ..."

        [GtkCallback]
        def on_thermal_simulation_clicked( thermal_simulation:Gtk.ModelButton )
            print "Signal handler 'on_thermal_simulation_clicked' was called ..."

        construct()
            print "On construction do stuff ..."

        final()
            print "On destruction do stuff ..."

        def activate()
            print "On activation do stuff ..."

        def process()
            print "On processing do stuff ..."

        def run()
            print "On run do stuff ..."

/* End of file */
例如,是否有任何程序将采用Glade模板xml文件并自动生成相应的编程Vala或Genie源代码

算了吧。Glade曾经有一个嵌入式功能,可以生成相应的代码来创建UI。删除此项有一个很好的理由:当您手动修改生成的代码时,它会使应用程序代码无法维护,如果您想更改UI,则必须重新生成源代码并解决所有冲突

现在,使用Glade生成的UI文件需要几行代码才能使用GtkBuilder。我同意,但是能够在代码中插入具有正确签名的回调将是一个加号。也许侏儒建造师计划这么做?您可能需要检查一下

例如,是否有任何程序将采用Glade模板xml文件并自动生成相应的编程Vala或Genie源代码

算了吧。Glade曾经有一个嵌入式功能,可以生成相应的代码来创建UI。删除此项有一个很好的理由:当您手动修改生成的代码时,它会使应用程序代码无法维护,如果您想更改UI,则必须重新生成源代码并解决所有冲突


现在,使用Glade生成的UI文件需要几行代码才能使用GtkBuilder。我同意,但是能够在代码中插入具有正确签名的回调将是一个加号。也许侏儒建造师计划这么做?您可能需要检查。

没有人阻止您。忙碌起来,发布结果,以便我可以使用它们。Lol也看看Anjuta。@Thegtknard我正在考虑做这件事,这就是为什么我要问。据我所知与你描述的很接近。我通常可以创建一个新项目,并以比创建基本文件更快的速度获得一个工作示例。这对SO来说特别好。@Thegtknard谢谢,我去看看。我喜欢新的Gnome构建器的是介子/Flatpak方向-所以如果Glade提供类似的方法就好了。没有人能阻止你。忙碌起来,发布结果,以便我可以使用它们。Lol也看看Anjuta。@Thegtknard我正在考虑做这件事,这就是为什么我要问。据我所知与你描述的很接近。我通常可以创建一个新项目,并以比创建基本文件更快的速度获得一个工作示例。这对SO来说特别好。@Thegtknard谢谢,我去看看。我喜欢的新GNOME构建器是介子/PalpPak取向——所以如果格莱德提供了类似的方法,那就太好了。谢谢这个信息,我们的工作主要是用C++模板元编程背景,主要是使用模板策略/特性的数值算法/模拟。除了一点Python,几乎没有任何C/Java的工作。我们一直在寻找将所有东西粘合在一起的GUI——因此对Gnome/Gtk3/4/5感兴趣。。。作为一个学习练习,我已经在Genie中编写了一个程序,该程序从一个Glade文件中生成完整的类结构,该文件的属性为[GtkTemplate]、[GtkChild]和[GtkCallback]。但是为了正确地测试它,我们还将生成main.gs、meson.build和gresources。如果已经有了一些东西,我不想去努力完成所有这些,因为似乎没有任何东西。当它完成时,我想要的是一套标准的应用程序窗口/窗口模板/数据输入表单,带有弹出菜单、标题栏等,可以在Glade中根据需要进行修改,然后自动生成整个项目,以便可以直接插入Gnome Builder
我不明白为什么Gnome repo没有最好包含可以插入Gnome Builder的Flatpak清单中的基于介子的代码段。它只需要很少的努力,并且会使开发变得更加容易。虽然将其作为Glade的一部分可能会很有用,但最好是有一个单独的系统,跨越Glade/Gnome Builder和Genie这两个用于项目初始化的系统。EntalyROS与花岗岩似乎是编程的问题,而不是通过GLAD。您应该直接在GNOME构建器IRC通道上询问。感谢这个信息-我们的工作主要是用C++模板元编程背景,主要是使用模板策略/特性的数值算法/模拟。除了一点Python,几乎没有任何C/Java的工作。我们一直在寻找将所有东西粘合在一起的GUI——因此对Gnome/Gtk3/4/5感兴趣。。。作为一个学习练习,我已经在Genie中编写了一个程序,该程序从一个Glade文件中生成完整的类结构,该文件的属性为[GtkTemplate]、[GtkChild]和[GtkCallback]。但是为了正确地测试它,我们还将生成main.gs、meson.build和gresources。如果已经有了一些东西,我不想去努力完成所有这些,因为似乎没有任何东西。完成后,我想要的是一套标准的应用程序窗口/窗口模板/数据输入表单,带有弹出式菜单、标题栏等,可以在Glade中根据需要进行修改,然后自动生成整个项目,这样就可以直接插入Gnome Builder。而且我不明白为什么Gnome repo中没有最好的基于介子的片段,可以插入Gnome Builder的Flatpak清单中。它只需要很少的努力,并且会使开发变得更加容易。虽然将其作为Glade的一部分可能会很有用,但最好是有一个单独的系统,跨越Glade/Gnome Builder和Genie这两个用于项目初始化的系统。ElementaryOS with Granite似乎是通过编程来解决这个问题,而不是通过Glade。你应该直接在gnome builder irc频道上问这个问题。