; Module/File: Dialog_About_5.pb
; Function: Standard-non-modal-About-Dialog (complete) - Linux gtk3
; Author: Omi
; Date: Sep. 05, 2014
; Version: 0.2, set parent
; Target Compiler: PureBasic 5.40
; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni
;--------------------------------------------------------------
EnableExplicit
ImportC ""
gtk_about_dialog_new()
gtk_about_dialog_set_program_name(*about, name.p-utf8)
gtk_about_dialog_set_version(*about, version.p-utf8)
gtk_about_dialog_set_copyright(*about, copyright.p-utf8)
gtk_about_dialog_set_comments(*about, comments.p-utf8)
gtk_about_dialog_set_license(*about, license.p-utf8)
gtk_about_dialog_set_website(*about, website.p-utf8)
gtk_about_dialog_set_website_label(*about, website_label.p-utf8)
gtk_about_dialog_set_logo(*about, *logo)
gtk_about_dialog_add_credit_section(*about, section_name.p-utf8, *people)
gtk_about_dialog_set_documenters(*about, *documenters)
gtk_about_dialog_set_authors(*about, *authors)
gtk_about_dialog_set_translator_credits(*about, translator_credits.p-utf8)
g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data"
EndImport
UsePNGImageDecoder()
; object variables
#MainWin= 0
#Exp1 = 0
#InfoImage= 0
Procedure.s PbToUtf8(SUni.s)
Protected *gMem= AllocateMemory(StringByteLength(SUni, #PB_Unicode) + 2)
PokeS(*gMem, SUni, -1, #PB_UTF8)
Protected.s UTF8= PeekS(*gMem)
FreeMemory(*gMem)
ProcedureReturn UTF8
EndProcedure
Global.l gEvent, gQuit
Global *gAbout
;Fill string-arrays in Utf8 ...
Global Dim AboutSupply.s(4); credits list
AboutSupply(0)= PbToUtf8("Fetch Jägermeister")
AboutSupply(1)= PbToUtf8("Wait Ress")
AboutSupply(2)= PbToUtf8("Garçon")
AboutSupply(3)= PbToUtf8("Veggie Tary")
AboutSupply(4)= #Null$
Global Dim AboutAuthors.s(4); authors list
AboutAuthors(0)= PbToUtf8("Pure Proggi")
AboutAuthors(1)= PbToUtf8("Assem Bler")
AboutAuthors(2)= PbToUtf8("Ate Visba")
AboutAuthors(3)= PbToUtf8(~"Fritz Eierschale")
AboutAuthors(4)= #Null$
Global Dim AboutDokumenters.s(4); documenters list
AboutDokumenters(0)= PbToUtf8("Canot Rite")
AboutDokumenters(1)= PbToUtf8("Ate Word")
AboutDokumenters(2)= PbToUtf8("Watar Letters")
AboutDokumenters(3)= PbToUtf8("Canned Read")
AboutDokumenters(4)= #Null$
ProcedureC Callback_ShowAbout(*widget.GtkWidget, user_data.l)
Debug user_data; here's the close signal
If user_data = #GTK_RESPONSE_CANCEL Or user_data = #GTK_RESPONSE_DELETE_EVENT
gtk_widget_destroy_(*widget); close & destroy. Also possible is gtk_widget_hide(), gtk_widget_show()
*gAbout= #Null
EndIf
EndProcedure
Procedure ShowAbout(*pixbuf, parent)
Protected.l Ret
Protected.s S= ~"Demo for full 'about-dialog'.\nFull features with embedded icon, authors, documeters, \ntranslators, copyright, website, license!"
*gAbout= gtk_about_dialog_new()
gtk_window_set_transient_for_(*gAbout, WindowID(parent))
gtk_about_dialog_set_program_name(*gAbout, "gtk3 - full API-about")
gtk_about_dialog_set_version(*gAbout, "v1.0")
gtk_about_dialog_set_copyright(*gAbout, "(c) by Charly Bauer (Omi)")
gtk_about_dialog_set_comments(*gAbout, S)
gtk_about_dialog_set_license(*gAbout, ~"Licensed as Freeware.\nDo what you want with it.")
gtk_about_dialog_set_website(*gAbout, "http://www.chabba.de/LinuxAPI.html")
gtk_about_dialog_set_website_label(*gAbout, "PureBasic Linux API Library")
gtk_about_dialog_add_credit_section(*gAbout, "Beer + Food Support 😋", @AboutSupply())
gtk_about_dialog_set_authors(*gAbout, @AboutAuthors())
gtk_about_dialog_set_documenters (*gAbout, @AboutDokumenters())
gtk_about_dialog_set_translator_credits(*gAbout, ~"Transi Later\nParler Français")
If *pixbuf
gtk_about_dialog_set_logo(*gAbout, *pixbuf)
EndIf
g_signal_connect(*gAbout, "response", @Callback_ShowAbout(), *gAbout); connect signal for callback on close & destroy
gtk_widget_show_all_(*gAbout)
EndProcedure
If OpenWindow(#MainWin, 300, 200, 400, 300, "about-dialog w. embedded icon", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CatchImage(#InfoImage, ?InfoIcon)
ShowAbout(ImageID(#InfoImage), #MainWin)
EndIf
Repeat
gEvent= WaitWindowEvent()
Select gEvent
Case #PB_Event_CloseWindow
gQuit= #True
EndSelect
Until gQuit
EndIf
If *gAbout
gtk_widget_destroy_(*gAbout)
Debug "'About' destroyed by closing parent window!"
EndIf
DataSection
;change to existing 48x48-icon ...
InfoIcon: : IncludeBinary "/usr/share/icons/default.kde4/48x48/apps/preferences-desktop-screensaver.png"; change to existing 48x48-icon
EndDataSection
; IDE Options = PureBasic 5.45 LTS (Linux - x86)
; CursorPosition = 8
; Folding = -
; EnableUnicode
; EnableXP