auto-scripts/auto-gtkmm4


Home Back

AUTHOR="Fabio Di Matteo"
VERSION="0.1.0"

 
#Controllo se e' stato fornito il nome del progetto
if [ "$1" = "" ];then
    echo "E' necessario fornire il nome del progetto come parametro."
    exit 1 ;
fi
 
#Se la directory del progetto esiste gia' esco.
mkdir $1 2>/dev/null
if [ "$?" != 0 ];then
    echo "Il progetto esiste."
    exit 1 ;
fi
 
cd $1


echo "Make resorces folder..."
mkdir res


echo "Make main.cc..."
echo "
#include <gtkmm.h>
#include <iostream>

class MyWindow : public Gtk::Window
{
public:
  MyWindow();
  void onClick();
protected:
     int c = 0;
     
     // Da notare che quando si usa Gtk::Builder i vari oggetti grafici sono puntatori.
     Gtk::Grid *mygrid; // Contenitore principale per adesso vuoto vuoto.
     Gtk::Label *mylabel;
     Gtk::Button *mybutton;
  
};

MyWindow::MyWindow()
{
  
  //Dal file gtkbuilder preleviamo solo il widget contenitore mygrid, ignorando la finestra.
  //auto builder = Gtk::Builder::create_from_file(\"simple.ui\", \"mygrid\");
  
  auto builder = Gtk::Builder::create();
  try
    {
        builder->add_from_resource(\"/app/res/gui.ui\", \"mygrid\");
    }
    catch(const Glib::FileError& ex)
    {
        std::cout << \"FileError: \" << ex.what() << std::endl;
    }
    catch(const Glib::MarkupError& ex)
    {
       std::cout << \"MarkupError: \" << ex.what() << std::endl;
    }
    catch(const Gtk::BuilderError& ex)
    {
       std::cout << \"BuilderError: \" << ex.what() << std::endl;
    }
  
  mygrid = builder->get_widget<Gtk::Grid>(\"mygrid\");
  
  
  mybutton = builder->get_widget<Gtk::Button>(\"mybutton\");
  mylabel= builder->get_widget<Gtk::Label>(\"mylabel\");
  mylabel->set_markup(\"<span size='36pt'>Clicca sul bottone</span>\");
  
  set_child(*mygrid);
  set_title(\"Basic application gtk builder\");
  set_default_size(440, 180);


  
  mybutton->signal_clicked().connect(sigc::mem_fun(*this,&MyWindow::onClick) );
}


void MyWindow::onClick()
{
    this->c++;
    this->mylabel->set_markup(\"<span size='36pt'> Cliccato: \" + std::to_string(this->c) + \"</span>\");

}


int main(int argc, char* argv[])
{
  auto app = Gtk::Application::create(\"org.gtkmm.examples.gtkbuilder\");
  return app->make_window_and_run<MyWindow>(argc, argv);
}

" > main.cc ;




echo "Make meson.build"
echo "
project('GTKmm', 'cpp')
gtkmm = dependency('gtkmm-4.0')



gnome = import('gnome')
myresources = gnome.compile_resources(
    'my-resources', 'res/resources.xml',
    source_dir: 'res',
    c_name: 'myresources'
)

os=build_machine.system()
if os == 'linux'
    executable('simple-meson', 'main.cc',myresources, dependencies : gtkmm)
endif
if os == 'windows'
  executable('simple-meson', 'main.cc',myresources, dependencies : gtkmm, link_args : ['-mwindows'])
endif

" > meson.build;


echo "Make resources"
echo "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<gresources>
  <gresource prefix=\"/app/res\">
    <file>gui.ui</file>
  </gresource>
</gresources>


" > res/resources.xml;


echo  "<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Cambalache 0.97.0 -->
<interface>
  <!-- interface-name simple.ui -->
  <requires lib=\"gtk\" version=\"4.12\"/>
  <object class=\"GtkWindow\" id=\"mywindow\">
    <child>
      <object class=\"GtkGrid\" id=\"mygrid\">
        <child>
          <object class=\"GtkLabel\" id=\"mylabel\">
            <layout>
              <property name=\"column\">0</property>
              <property name=\"column-span\">1</property>
              <property name=\"row\">0</property>
              <property name=\"row-span\">1</property>
            </layout>
          </object>
        </child>
        <child>
          <object class=\"GtkButton\" id=\"mybutton\">
            <property name=\"label\">clicca</property>
            <layout>
              <property name=\"column\">0</property>
              <property name=\"column-span\">1</property>
              <property name=\"row\">1</property>
              <property name=\"row-span\">1</property>
            </layout>
          </object>
        </child>
      </object>
    </child>
  </object>
</interface>

" > res/gui.ui ;


echo "<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<!DOCTYPE cambalache-project SYSTEM \"cambalache-project.dtd\">
<!-- Created with Cambalache 0.97.0 -->
<cambalache-project version=\"0.96.0\" target_tk=\"gtk-4.0\">
  <ui filename=\"gui.ui\" />
</cambalache-project>" > res/gui.cmb ;


echo "#!/bin/bash

cd res
echo 'Building resources.c ...'
glib-compile-resources --generate-source resources.xml
mv resources.c ../resources.cpp


" > compile_resources.sh;
chmod +x compile_resources.sh

Powered by Code, a simple repository browser by Fabio Di Matteo