drogonCMS-cmake into main branch that replaces make plus other things #1

Merged
sharpetronics merged 36 commits from drogonCMS-cmake into master 2024-01-18 19:01:07 -05:00
6 changed files with 166 additions and 126 deletions
Showing only changes of commit 9d432b3ac0 - Show all commits

5
.gitignore vendored
View File

@ -31,6 +31,10 @@ autom4te.cache
configure~
build-aux
build
cmake_install.cmake
CTestTestfile.cmake
CMakeFiles/
CMakeCache.txt
# https://www.gnu.org/software/libtool/
@ -51,6 +55,7 @@ m4/lt~obsolete.m4
# exclude executables
/drogon_dashboard
/DrogonCMS
# Generated Makefile
# (meta build system like autotools,

View File

@ -28,48 +28,78 @@
# you pick up the best policies.
cmake_minimum_required(VERSION 3.1...3.28)
# This is your project statement. You should always list languages;
# Listing the version is nice here since it sets lots of useful variables
# we removed LANGUAGES C from project to allow for automatic compiler/linker checks; we will use C and C++ libraries for this project.
project(
DrogonCMS
VERSION 1.0
LANGUAGES C CXX)
# Adding something we can run - Output name matches target name
add_executable(DrogonCMS src/base.c)
# If you set any CMAKE_ variables, that can go here.
# (But usually don't do this, except maybe for C++ standard)
set(CMAKE_PROJECT_DESCRIPTION "A GTK / Drogon CMS")
set(CMAKE_PROJECT_HOMEPAGE_URL "https://github.com/odinzu/drogoncms")
set(CMAKE_C_STANDARD 11)
#set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
#set(CMAKE_CXX_STANDARD_REQUIRED ON)
# This is your project statement. You should always list languages;
# Listing the version is nice here since it sets lots of useful variables
# we removed LANGUAGES C from project to allow for automatic compiler/linker checks; we will use C and C++ libraries for this project.
project(
DrogonCMS
VERSION 1.0)
#===============================================================================
# Setting compilation flags for various compilers and build types:
#===============================================================================
# some test warning levels for GCC
set(WARNING_LEVELS_GCC
#-Werror
)
set(WARNING_LEVELS_GCC_DEBUG
#-Wfloat-equal
#-Wextra
-Wall
-Wdeprecated-declarations
#-Wundef
#-Wshadow
#-Wpointer-arith
#-Wcast-align
#-Wstrict-overflow=5
#-Wwrite-strings
#-Waggregate-return
#-Wcast-qual
#-Wswitch-default
#-Wswitch-enum
#-Wconversion
)
# Print system, compiler CMake ID, version and path:
#message(STATUS "System: ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}")
#message(STATUS "Compiler: ${CMAKE_Fortran_COMPILER_ID} ${CMAKE_Fortran_COMPILER_VERSION} ${CMAKE_Fortran_COMPILER}")
#message(STATUS "Build type is: ${CMAKE_BUILD_TYPE}")
set(CMAKE_C_FLAGS "gtk4")
#===============================================================================
# Default build type is release
# Uncomment this to debug or use "cmake -D CMAKE_BUILD_TYPE=debug .."
#===============================================================================
# set(CMAKE_BUILD_TYPE debug)
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE release)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING
"Choose build type: None Debug Release RelWithDebInfo MinSizeRel"
FORCE)
endif()
# Find packages go here.
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK4 REQUIRED IMPORTED_TARGET gtk4)
pkg_check_modules(ADW REQUIRED IMPORTED_TARGET libadwaita-1)
pkg_check_modules(GTK4 REQUIRED gtk4>=4.0)
pkg_check_modules(ADW REQUIRED libadwaita-1>=1.3.5)
# You should usually split this into folders, but this is a simple example
# Setup CMake to use GTK+, tell the compiler where to look for headers
# and to the linker where to look for libraries
include_directories(${GTK4_INCLUDE_DIRS} ${ADW_INCLUDE_DIRS})
link_directories(${GTK4_LIBRARY_DIRS} ${ADW_LIBRARY_DIRS})
add_definitions(${GTK4_CFLAGS_OTHER} ${ADW_CFLAGS_OTHER})
# Adding something we can run - Output name matches target name
add_executable(DrogonCMS src/base.c)
# This is a "default" library, and will match the *** variable setting.
# Other common choices are STATIC, SHARED, and MODULE
@ -78,12 +108,13 @@ pkg_check_modules(ADW REQUIRED IMPORTED_TARGET libadwaita-1)
#add_library(MyLibExample simple_lib.cpp simple_lib.hpp)
# Link each target with other targets or add options, etc.
# Make sure you link your targets with this command. It can also link libraries and
# even flags, so linking a target that does not exist will not give a configure-time error.
target_link_libraries(DrogonCMS PRIVATE PkgConfig::GTK4)
target_link_libraries(DrogonCMS PRIVATE PkgConfig::ADW)
## [main]
target_include_directories(${PROJECT_NAME} PUBLIC ${GTK4_LIBRARIES} ${ADW_LIBRARIES})
target_link_libraries(${PROJECT_NAME} PRIVATE ${GTK4_LIBRARIES} ${ADW_LIBRARIES})
# Target Compile Options
target_compile_options(${PROJECT_NAME} PRIVATE ${WARNING_LEVELS_GCC} $<$<CONFIG:DEBUG>:${WARNING_LEVELS_GCC_DEBUG}>)
# This part is so the Modern CMake book can verify this example builds. For your code,
# you'll probably want tests too
@ -103,7 +134,10 @@ enable_testing()
#===============================================================================
# Add subdirectories to build:
#===============================================================================
add_subdirectory(src)
#add_subdirectory(src)
# include directory for third party libraries
include_directories(vendors/)
###############################################################################
## PACKAGING ##################################################################

View File

@ -46,9 +46,9 @@ This is what my build commands look like in Geany IDE with **BSD CMake Tools**.
| Name | Command | Working Directory |
| ----------- | ------------------ | -------------------------------------------------------------------- |
| Configure | cmake -DCMAKE_BUILD_TYPE=Release | /home/username/Desktop/Local-Development/cplusplus/drogon-dash/build |
| AutoReconf | cmake --build | /home/username/Desktop/Local-Development/cplusplus/drogon-dash |
| Run | ./DrogonCMS | /home/username/Desktop/Local-Development/cplusplus/drogon-dash/build |
| Configure | cmake -DCMAKE_BUILD_TYPE=Release | /home/username/Desktop/Local-Development/cplusplus/DrogonCMS |
| AutoReconf | cmake --build | /home/username/Desktop/Local-Development/cplusplus/DrogonCMS |
| Run | ./DrogonCMS | /home/username/Desktop/Local-Development/cplusplus/DrogonCMS |
## Authors
@ -65,7 +65,7 @@ oDinZu WenKi https://liberapay.com/oDinZu/
* No commission fee
* ~5% payment processing fee
Bitcoin/Crypto Donations: [SEND INQUIRIES TO INFO@SHARPETRONICS.COM TITLED: BITCOIN INQUIRY - BUSINESS/ALIAS]
Bitcoin/Crypto Donations: [SEND INQUIRIES TO INFO@SHARPETRONICS.COM TITLED: CRYPTO INQUIRY - BUSINESS/ALIAS]
## Learning Resources
* Adawaita Documentation https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/index.html

View File

@ -32,15 +32,41 @@
*/
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <stdio.h>
/*
Static Variables
*/
static GtkWidget *p_input;
static GtkWidget *p_input_confirm;
static GtkWidget *register_button;
/*
Functions
*/
/* Compare password entries for admin registration confirmation */
static void
update_register_button(GObject *object,
GParamSpec *pspec,
gpointer data)
{
const char *text = gtk_editable_get_text(GTK_EDITABLE(p_input));
const char *text2 = gtk_editable_get_text(GTK_EDITABLE(p_input_confirm));
//PLACEHOLDER Thish widget set needs to work with GtkBuilder.
//This can be done easily but may need a condiontal statement.
//Another issue is to use the gtkbuilder, I would have to duplicate code here or learn how to arrange each iteration in a module or easy to use function.
//gtk_widget_set_sensitive (register_button,
//text[0] != '\0' && g_str_equal (text, text2));
}
/* Launch the application from activate */
static void
activate (GtkApplication *app,
gpointer user_data)
activate(GtkApplication *app,
gpointer user_data)
{
/* Construct a GtkBuilder instance */
GtkBuilder *builder = gtk_builder_new();
@ -48,22 +74,38 @@ activate (GtkApplication *app,
/* Loads the UI objects */
gtk_builder_add_from_file(builder, "../src/ui/admin-register.ui", NULL);
/* Register the ID of gtk_object from admin-register.ui */
/* Register the ID's of gtk_object from admin-register.ui */
GObject *window = gtk_builder_get_object(builder, "register_window");
p_input = gtk_builder_get_object(builder, "p_input");
GObject *p_input_confirm = gtk_builder_get_object(builder, "p_input_confirm");
GObject *register_button = gtk_builder_get_object(builder, "register_button");
/* Connect the actions of XML UI objects's with Gtk Signals */
/* In Gtk_builder, we edit the specific widget; Gtk_builder contains all widgets created from Cambalache UI's */
/* Connect input text with update_button compariative function */
g_signal_connect(p_input, "notify::text", G_CALLBACK(update_register_button), NULL);
g_signal_connect(p_input_confirm, "notify::text", G_CALLBACK(update_register_button), NULL);
/* Sets the app window with *app GtkApplication */
gtk_window_set_application(GTK_WINDOW(window), app);
/* Display the Gtk GUI */
gtk_widget_set_visible(window, TRUE);
/*
* Adds a weak reference from weak_pointer object to indicate that the
* pointer located at weak_pointer_location is only valid during the lifetime of object.
* When the object is finalized, weak_pointer will be set to NULL.
*/
g_object_add_weak_pointer(G_OBJECT (window), (gpointer *)&window);
/* Dereference and free computer memory */
/* Dereference and free the computer memory */
g_object_unref(builder);
}
/*
Main program begins here
*/

View File

@ -27,7 +27,7 @@ oDinZu WenKi -->
<child>
<object class="GtkImage" id="logo">
<property name="accessible-role">img</property>
<property name="icon-name">audio-x-generic</property>
<property name="icon-name">application-x-executable</property>
<property name="icon-size">large</property>
<property name="margin-bottom">10</property>
<property name="pixel-size">75</property>
@ -42,7 +42,7 @@ oDinZu WenKi -->
<child>
<object class="GtkLabel" id="title_label">
<property name="justify">center</property>
<property name="label">Welcome to SharpeTronics</property>
<property name="label">Welcome</property>
<layout>
<property name="column">0</property>
<property name="column-span">2</property>
@ -54,7 +54,7 @@ oDinZu WenKi -->
<child>
<object class="GtkLabel" id="moto_label">
<property name="justify">center</property>
<property name="label">A Drogon Dashboard</property>
<property name="label">A Drogon Application</property>
<property name="margin-bottom">15</property>
<layout>
<property name="column">0</property>
@ -76,19 +76,10 @@ oDinZu WenKi -->
</object>
</child>
<child>
<object class="GtkTextView" id="first_name_input">
<property name="accepts-tab">False</property>
<property name="accessible-role">input</property>
<property name="focus-on-click">False</property>
<object class="GtkEntry" id="first_name_input">
<property name="hexpand">True</property>
<property name="indent">3</property>
<property name="input-hints">no-emoji | no-spellcheck | private</property>
<property name="input-purpose">name</property>
<property name="left-margin">1</property>
<property name="margin-bottom">5</property>
<property name="pixels-above-lines">5</property>
<property name="pixels-below-lines">5</property>
<property name="tooltip-text">Enter the first name</property>
<property name="placeholder-text">e.g. John</property>
<property name="tooltip-text">Enter your first name</property>
<layout>
<property name="column">0</property>
<property name="row">5</property>
@ -108,19 +99,10 @@ oDinZu WenKi -->
</object>
</child>
<child>
<object class="GtkTextView" id="last_name_input">
<property name="accepts-tab">False</property>
<property name="accessible-role">input</property>
<property name="focus-on-click">False</property>
<object class="GtkEntry" id="last_name_input">
<property name="hexpand">True</property>
<property name="indent">3</property>
<property name="input-hints">no-emoji | no-spellcheck | private</property>
<property name="input-purpose">name</property>
<property name="left-margin">1</property>
<property name="margin-bottom">5</property>
<property name="pixels-above-lines">5</property>
<property name="pixels-below-lines">5</property>
<property name="tooltip-text">Enter the last name</property>
<property name="placeholder-text">e.g. Jacobs</property>
<property name="tooltip-text">Enter your last name</property>
<layout>
<property name="column">1</property>
<property name="row">5</property>
@ -136,6 +118,7 @@ oDinZu WenKi -->
</object>
</property>
<property name="margin-bottom">50</property>
<property name="sensitive">False</property>
<layout>
<property name="column">0</property>
<property name="column-span">2</property>
@ -158,18 +141,9 @@ oDinZu WenKi -->
</object>
</child>
<child>
<object class="GtkTextView" id="email_input">
<property name="accepts-tab">False</property>
<property name="accessible-role">input</property>
<property name="focus-on-click">False</property>
<property name="indent">3</property>
<property name="input-hints">no-emoji | no-spellcheck</property>
<property name="input-purpose">email</property>
<property name="left-margin">1</property>
<property name="margin-bottom">5</property>
<property name="pixels-above-lines">5</property>
<property name="pixels-below-lines">5</property>
<property name="tooltip-text">Enter the user email</property>
<object class="GtkEntry" id="email_input">
<property name="placeholder-text">e.g. johnjacobs@email.com</property>
<property name="tooltip-text">Enter your email address</property>
<layout>
<property name="column">0</property>
<property name="column-span">2</property>
@ -190,11 +164,17 @@ oDinZu WenKi -->
</object>
</child>
<child>
<object class="GtkPasswordEntry" id="password_input">
<object class="GtkPasswordEntry" id="p_input">
<property name="accessible-role">input</property>
<property name="margin-bottom">5</property>
<property name="placeholder-text">e.g. password test</property>
<property name="show-peek-icon">True</property>
<property name="tooltip-text">Enter the user password</property>
<property name="tooltip-text">Enter your password</property>
<child>
<object class="GtkPasswordEntryBuffer">
<property name="max-length">12</property>
</object>
</child>
<layout>
<property name="column">0</property>
<property name="column-span">2</property>
@ -215,11 +195,12 @@ oDinZu WenKi -->
</object>
</child>
<child>
<object class="GtkPasswordEntry" id="password_input_confirm">
<object class="GtkPasswordEntry" id="p_input_confirm">
<property name="accessible-role">input</property>
<property name="margin-bottom">5</property>
<property name="placeholder-text">e.g. password test</property>
<property name="show-peek-icon">True</property>
<property name="tooltip-text">Enter the user password</property>
<property name="tooltip-text">Enter your password</property>
<layout>
<property name="column">0</property>
<property name="column-span">2</property>

View File

@ -50,17 +50,18 @@
(3,5,"GtkLabel","title_label",3,None,None,None,1,None),
(3,6,"GtkLabel","moto_label",3,None,None,None,2,None),
(3,7,"GtkLabel","first_name_label",3,None,None,None,3,None),
(3,8,"GtkTextView","first_name_input",3,None,None,None,4,None),
(3,9,"GtkLabel","last_name_label",3,None,None,None,5,None),
(3,10,"GtkTextView","last_name_input",3,None,None,None,6,None),
(3,12,"GtkButton","register_button",3,None,None,None,7,None),
(3,13,"GtkLabel","email_label",3,None,None,None,8,None),
(3,14,"GtkTextView","email_input",3,None,None,None,9,None),
(3,15,"GtkLabel","password_label",3,None,None,None,10,None),
(3,17,"GtkLabel","password_label_confirm",3,None,None,None,13,None),
(3,17,"GtkLabel","password_label_confirm",3,None,None,None,12,None),
(3,20,"AdwButtonContent",None,12,None,None,None,-1,None),
(3,21,"GtkPasswordEntry","password_input",3,None,None,None,11,None),
(3,22,"GtkPasswordEntry","password_input_confirm",3,None,None,None,14,None),
(3,21,"GtkPasswordEntry","p_input",3,None,None,None,11,None),
(3,22,"GtkPasswordEntry","p_input_confirm",3,None,None,None,13,None),
(3,23,"GtkEntry","first_name_input",3,None,None,None,4,None),
(3,24,"GtkEntry","last_name_input",3,None,None,None,6,None),
(3,25,"GtkEntry","email_input",3,None,None,None,9,None),
(3,26,"GtkPasswordEntryBuffer",None,21,None,None,None,-1,None),
(4,1,"GtkWindow","passwordWindow",None,None,None,None,None,None),
(4,2,"GtkCenterBox",None,1,None,None,None,None,None),
(4,3,"GtkGrid",None,2,None,"center",None,None,None),
@ -177,64 +178,30 @@
(3,3,"GtkWidget","halign","center",None,None,None,None,None,None,None,None,None),
(3,3,"GtkWidget","width-request","450",None,None,None,None,None,None,None,None,None),
(3,4,"GtkAccessible","accessible-role","img",None,None,None,None,None,None,None,None,None),
(3,4,"GtkImage","icon-name","audio-x-generic",None,None,None,None,None,None,None,None,None),
(3,4,"GtkImage","icon-name","application-x-executable",None,None,None,None,None,None,None,None,None),
(3,4,"GtkImage","icon-size","large",None,None,None,None,None,None,None,None,None),
(3,4,"GtkImage","pixel-size","75",None,None,None,None,None,None,None,None,None),
(3,4,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(3,5,"GtkLabel","justify","center",None,None,None,None,None,None,None,None,None),
(3,5,"GtkLabel","label","Welcome to SharpeTronics",None,None,None,None,None,None,None,None,None),
(3,5,"GtkLabel","label","Welcome",None,None,None,None,None,None,None,None,None),
(3,6,"GtkLabel","justify","center",None,None,None,None,None,None,None,None,None),
(3,6,"GtkLabel","label","A Drogon Dashboard",None,None,None,None,None,None,None,None,None),
(3,6,"GtkLabel","label","A Drogon Application",None,None,None,None,None,None,None,None,None),
(3,6,"GtkWidget","margin-bottom","15",None,None,None,None,None,None,None,None,None),
(3,7,"GtkAccessible","accessible-role","label",None,None,None,None,None,None,None,None,None),
(3,7,"GtkLabel","label","First Name:",None,None,None,None,None,None,None,None,None),
(3,7,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(3,7,"GtkWidget","margin-bottom","2",None,None,None,None,None,None,None,None,None),
(3,8,"GtkAccessible","accessible-role","input",None,None,None,None,None,None,None,None,None),
(3,8,"GtkTextView","accepts-tab","False",None,None,None,None,None,None,None,None,None),
(3,8,"GtkTextView","indent","3",None,None,None,None,None,None,None,None,None),
(3,8,"GtkTextView","input-hints","no-emoji | no-spellcheck | private",None,None,None,None,None,None,None,None,None),
(3,8,"GtkTextView","input-purpose","name",None,None,None,None,None,None,None,None,None),
(3,8,"GtkTextView","left-margin","1",None,None,None,None,None,None,None,None,None),
(3,8,"GtkTextView","pixels-above-lines","5",None,None,None,None,None,None,None,None,None),
(3,8,"GtkTextView","pixels-below-lines","5",None,None,None,None,None,None,None,None,None),
(3,8,"GtkWidget","focus-on-click","False",None,None,None,None,None,None,None,None,None),
(3,8,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(3,8,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(3,8,"GtkWidget","tooltip-text","Enter the first name",None,None,None,None,None,None,None,None,None),
(3,9,"GtkAccessible","accessible-role","label",None,None,None,None,None,None,None,None,None),
(3,9,"GtkLabel","label","Last Name:",None,None,None,None,None,None,None,None,None),
(3,9,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(3,9,"GtkWidget","margin-bottom","2",None,None,None,None,None,None,None,None,None),
(3,10,"GtkAccessible","accessible-role","input",None,None,None,None,None,None,None,None,None),
(3,10,"GtkTextView","accepts-tab","False",None,None,None,None,None,None,None,None,None),
(3,10,"GtkTextView","indent","3",None,None,None,None,None,None,None,None,None),
(3,10,"GtkTextView","input-hints","no-emoji | no-spellcheck | private",None,None,None,None,None,None,None,None,None),
(3,10,"GtkTextView","input-purpose","name",None,None,None,None,None,None,None,None,None),
(3,10,"GtkTextView","left-margin","1",None,None,None,None,None,None,None,None,None),
(3,10,"GtkTextView","pixels-above-lines","5",None,None,None,None,None,None,None,None,None),
(3,10,"GtkTextView","pixels-below-lines","5",None,None,None,None,None,None,None,None,None),
(3,10,"GtkWidget","focus-on-click","False",None,None,None,None,None,None,None,None,None),
(3,10,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(3,10,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(3,10,"GtkWidget","tooltip-text","Enter the last name",None,None,None,None,None,None,None,None,None),
(3,12,"GtkButton","child",None,None,None,None,None,20,None,None,None,None),
(3,12,"GtkWidget","margin-bottom","50",None,None,None,None,None,None,None,None,None),
(3,12,"GtkWidget","sensitive","False",None,None,None,None,None,None,None,None,None),
(3,13,"GtkAccessible","accessible-role","label",None,None,None,None,None,None,None,None,None),
(3,13,"GtkLabel","label","Email:",None,None,None,None,None,None,None,None,None),
(3,13,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
(3,13,"GtkWidget","margin-bottom","2",None,None,None,None,None,None,None,None,None),
(3,14,"GtkAccessible","accessible-role","input",None,None,None,None,None,None,None,None,None),
(3,14,"GtkTextView","accepts-tab","False",None,None,None,None,None,None,None,None,None),
(3,14,"GtkTextView","indent","3",None,None,None,None,None,None,None,None,None),
(3,14,"GtkTextView","input-hints","no-emoji | no-spellcheck",None,None,None,None,None,None,None,None,None),
(3,14,"GtkTextView","input-purpose","email",None,None,None,None,None,None,None,None,None),
(3,14,"GtkTextView","left-margin","1",None,None,None,None,None,None,None,None,None),
(3,14,"GtkTextView","pixels-above-lines","5",None,None,None,None,None,None,None,None,None),
(3,14,"GtkTextView","pixels-below-lines","5",None,None,None,None,None,None,None,None,None),
(3,14,"GtkWidget","focus-on-click","False",None,None,None,None,None,None,None,None,None),
(3,14,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(3,14,"GtkWidget","tooltip-text","Enter the user email",None,None,None,None,None,None,None,None,None),
(3,15,"GtkLabel","label","Password:",None,None,None,None,None,None,None,None,None),
(3,15,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
(3,15,"GtkWidget","margin-bottom","2",None,None,None,None,None,None,None,None,None),
@ -244,13 +211,24 @@
(3,20,"AdwButtonContent","icon-name","pan-start-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(3,20,"AdwButtonContent","label","Let's Start",None,None,None,None,None,None,None,None,None),
(3,21,"GtkAccessible","accessible-role","input",None,None,None,None,None,None,None,None,None),
(3,21,"GtkPasswordEntry","placeholder-text","e.g. password test",None,None,None,None,None,None,None,None,None),
(3,21,"GtkPasswordEntry","show-peek-icon","True",None,None,None,None,None,None,None,None,None),
(3,21,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(3,21,"GtkWidget","tooltip-text","Enter the user password",None,None,None,None,None,None,None,None,None),
(3,21,"GtkWidget","tooltip-text","Enter your password",None,None,None,None,None,None,None,None,None),
(3,22,"GtkAccessible","accessible-role","input",None,None,None,None,None,None,None,None,None),
(3,22,"GtkPasswordEntry","placeholder-text","e.g. password test",None,None,None,None,None,None,None,None,None),
(3,22,"GtkPasswordEntry","show-peek-icon","True",None,None,None,None,None,None,None,None,None),
(3,22,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(3,22,"GtkWidget","tooltip-text","Enter the user password",None,None,None,None,None,None,None,None,None),
(3,22,"GtkWidget","tooltip-text","Enter your password",None,None,None,None,None,None,None,None,None),
(3,23,"GtkEntry","placeholder-text","e.g. John",None,None,None,None,None,None,None,None,None),
(3,23,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(3,23,"GtkWidget","tooltip-text","Enter your first name",None,None,None,None,None,None,None,None,None),
(3,24,"GtkEntry","placeholder-text","e.g. Jacobs",None,None,None,None,None,None,None,None,None),
(3,24,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(3,24,"GtkWidget","tooltip-text","Enter your last name",None,None,None,None,None,None,None,None,None),
(3,25,"GtkEntry","placeholder-text","e.g. johnjacobs@email.com",None,None,None,None,None,None,None,None,None),
(3,25,"GtkWidget","tooltip-text","Enter your email address",None,None,None,None,None,None,None,None,None),
(3,26,"GtkEntryBuffer","max-length","12",None,None,None,None,None,None,None,None,None),
(4,1,"GtkWindow","default-height","300",None,None,None,None,None,None,None,None,None),
(4,1,"GtkWindow","default-width","300",None,None,None,None,None,None,None,None,None),
(4,1,"GtkWindow","title","Login",None,None,None,None,None,None,None,None,None),
@ -328,19 +306,14 @@
(3,3,6,"GtkGridLayoutChild","row","2",None,None,None,None),
(3,3,7,"GtkGridLayoutChild","column","0",None,None,None,None),
(3,3,7,"GtkGridLayoutChild","row","4",None,None,None,None),
(3,3,8,"GtkGridLayoutChild","row","5",None,None,None,None),
(3,3,9,"GtkGridLayoutChild","column","1",None,None,None,None),
(3,3,9,"GtkGridLayoutChild","row","4",None,None,None,None),
(3,3,10,"GtkGridLayoutChild","column","1",None,None,None,None),
(3,3,10,"GtkGridLayoutChild","row","5",None,None,None,None),
(3,3,12,"GtkGridLayoutChild","column","0",None,None,None,None),
(3,3,12,"GtkGridLayoutChild","column-span","2",None,None,None,None),
(3,3,12,"GtkGridLayoutChild","row","12",None,None,None,None),
(3,3,12,"GtkGridLayoutChild","row-span","1",None,None,None,None),
(3,3,13,"GtkGridLayoutChild","column-span","2",None,None,None,None),
(3,3,13,"GtkGridLayoutChild","row","6",None,None,None,None),
(3,3,14,"GtkGridLayoutChild","column-span","2",None,None,None,None),
(3,3,14,"GtkGridLayoutChild","row","7",None,None,None,None),
(3,3,15,"GtkGridLayoutChild","column-span","2",None,None,None,None),
(3,3,15,"GtkGridLayoutChild","row","8",None,None,None,None),
(3,3,17,"GtkGridLayoutChild","column-span","2",None,None,None,None),
@ -349,6 +322,11 @@
(3,3,21,"GtkGridLayoutChild","row","9",None,None,None,None),
(3,3,22,"GtkGridLayoutChild","column-span","2",None,None,None,None),
(3,3,22,"GtkGridLayoutChild","row","11",None,None,None,None),
(3,3,23,"GtkGridLayoutChild","row","5",None,None,None,None),
(3,3,24,"GtkGridLayoutChild","column","1",None,None,None,None),
(3,3,24,"GtkGridLayoutChild","row","5",None,None,None,None),
(3,3,25,"GtkGridLayoutChild","column-span","2",None,None,None,None),
(3,3,25,"GtkGridLayoutChild","row","7",None,None,None,None),
(4,3,4,"GtkGridLayoutChild","column","0",None,None,None,None),
(4,3,4,"GtkGridLayoutChild","column-span","1",None,None,None,None),
(4,3,4,"GtkGridLayoutChild","row","0",None,None,None,None),