1 /* 2 * This file is part of gtkD. 3 * 4 * gtkD is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU Lesser General Public License 6 * as published by the Free Software Foundation; either version 3 7 * of the License, or (at your option) any later version, with 8 * some exceptions, please read the COPYING file. 9 * 10 * gtkD is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with gtkD; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA 18 */ 19 20 // generated automatically - do not change 21 // find conversion definition on APILookup.txt 22 // implement new conversion functionalities on the wrap.utils pakage 23 24 25 module gtk.AboutDialog; 26 27 private import gdkpixbuf.Pixbuf; 28 private import glib.ConstructionException; 29 private import glib.Str; 30 private import gobject.ObjectG; 31 private import gobject.Signals; 32 private import gtk.Dialog; 33 private import gtk.Widget; 34 private import gtk.Window; 35 public import gtkc.gdktypes; 36 private import gtkc.gtk; 37 public import gtkc.gtktypes; 38 private import std.algorithm; 39 40 41 /** 42 * The GtkAboutDialog offers a simple way to display information about 43 * a program like its logo, name, copyright, website and license. It is 44 * also possible to give credits to the authors, documenters, translators 45 * and artists who have worked on the program. An about dialog is typically 46 * opened when the user selects the `About` option from the `Help` menu. 47 * All parts of the dialog are optional. 48 * 49 * About dialogs often contain links and email addresses. GtkAboutDialog 50 * displays these as clickable links. By default, it calls gtk_show_uri() 51 * when a user clicks one. The behaviour can be overridden with the 52 * #GtkAboutDialog::activate-link signal. 53 * 54 * To specify a person with an email address, use a string like 55 * "Edgar Allan Poe <edgar@poe.com>". To specify a website with a title, 56 * use a string like "GTK+ team http://www.gtk.org". 57 * 58 * To make constructing a GtkAboutDialog as convenient as possible, you can 59 * use the function gtk_show_about_dialog() which constructs and shows a dialog 60 * and keeps it around so that it can be shown again. 61 * 62 * Note that GTK+ sets a default title of `_("About %s")` on the dialog 63 * window (where \%s is replaced by the name of the application, but in 64 * order to ensure proper translation of the title, applications should 65 * set the title property explicitly when constructing a GtkAboutDialog, 66 * as shown in the following example: 67 * |[<!-- language="C" --> 68 * gtk_show_about_dialog (NULL, 69 * "program-name", "ExampleCode", 70 * "logo", example_logo, 71 * "title" _("About ExampleCode"), 72 * NULL); 73 * ]| 74 * 75 * It is also possible to show a #GtkAboutDialog like any other #GtkDialog, 76 * e.g. using gtk_dialog_run(). In this case, you might need to know that 77 * the “Close” button returns the #GTK_RESPONSE_CANCEL response id. 78 */ 79 public class AboutDialog : Dialog 80 { 81 /** the main Gtk struct */ 82 protected GtkAboutDialog* gtkAboutDialog; 83 84 /** Get the main Gtk struct */ 85 public GtkAboutDialog* getAboutDialogStruct() 86 { 87 return gtkAboutDialog; 88 } 89 90 /** the main Gtk struct as a void* */ 91 protected override void* getStruct() 92 { 93 return cast(void*)gtkAboutDialog; 94 } 95 96 protected override void setStruct(GObject* obj) 97 { 98 gtkAboutDialog = cast(GtkAboutDialog*)obj; 99 super.setStruct(obj); 100 } 101 102 /** 103 * Sets our main struct and passes it to the parent class. 104 */ 105 public this (GtkAboutDialog* gtkAboutDialog, bool ownedRef = false) 106 { 107 this.gtkAboutDialog = gtkAboutDialog; 108 super(cast(GtkDialog*)gtkAboutDialog, ownedRef); 109 } 110 111 112 /** */ 113 public static GType getType() 114 { 115 return gtk_about_dialog_get_type(); 116 } 117 118 /** 119 * Creates a new #GtkAboutDialog. 120 * 121 * Return: a newly created #GtkAboutDialog 122 * 123 * Since: 2.6 124 * 125 * Throws: ConstructionException GTK+ fails to create the object. 126 */ 127 public this() 128 { 129 auto p = gtk_about_dialog_new(); 130 131 if(p is null) 132 { 133 throw new ConstructionException("null returned by new"); 134 } 135 136 this(cast(GtkAboutDialog*) p); 137 } 138 139 /** 140 * Creates a new section in the Credits page. 141 * 142 * Params: 143 * sectionName = The name of the section 144 * people = The people who belong to that section 145 * 146 * Since: 3.4 147 */ 148 public void addCreditSection(string sectionName, string[] people) 149 { 150 gtk_about_dialog_add_credit_section(gtkAboutDialog, Str.toStringz(sectionName), Str.toStringzArray(people)); 151 } 152 153 /** 154 * Returns the string which are displayed in the artists tab 155 * of the secondary credits dialog. 156 * 157 * Return: A 158 * %NULL-terminated string array containing the artists. The array is 159 * owned by the about dialog and must not be modified. 160 * 161 * Since: 2.6 162 */ 163 public string[] getArtists() 164 { 165 return Str.toStringArray(gtk_about_dialog_get_artists(gtkAboutDialog)); 166 } 167 168 /** 169 * Returns the string which are displayed in the authors tab 170 * of the secondary credits dialog. 171 * 172 * Return: A 173 * %NULL-terminated string array containing the authors. The array is 174 * owned by the about dialog and must not be modified. 175 * 176 * Since: 2.6 177 */ 178 public string[] getAuthors() 179 { 180 return Str.toStringArray(gtk_about_dialog_get_authors(gtkAboutDialog)); 181 } 182 183 /** 184 * Returns the comments string. 185 * 186 * Return: The comments. The string is owned by the about 187 * dialog and must not be modified. 188 * 189 * Since: 2.6 190 */ 191 public string getComments() 192 { 193 return Str.toString(gtk_about_dialog_get_comments(gtkAboutDialog)); 194 } 195 196 /** 197 * Returns the copyright string. 198 * 199 * Return: The copyright string. The string is owned by the about 200 * dialog and must not be modified. 201 * 202 * Since: 2.6 203 */ 204 public string getCopyright() 205 { 206 return Str.toString(gtk_about_dialog_get_copyright(gtkAboutDialog)); 207 } 208 209 /** 210 * Returns the string which are displayed in the documenters 211 * tab of the secondary credits dialog. 212 * 213 * Return: A 214 * %NULL-terminated string array containing the documenters. The 215 * array is owned by the about dialog and must not be modified. 216 * 217 * Since: 2.6 218 */ 219 public string[] getDocumenters() 220 { 221 return Str.toStringArray(gtk_about_dialog_get_documenters(gtkAboutDialog)); 222 } 223 224 /** 225 * Returns the license information. 226 * 227 * Return: The license information. The string is owned by the about 228 * dialog and must not be modified. 229 * 230 * Since: 2.6 231 */ 232 public string getLicense() 233 { 234 return Str.toString(gtk_about_dialog_get_license(gtkAboutDialog)); 235 } 236 237 /** 238 * Retrieves the license set using gtk_about_dialog_set_license_type() 239 * 240 * Return: a #GtkLicense value 241 * 242 * Since: 3.0 243 */ 244 public GtkLicense getLicenseType() 245 { 246 return gtk_about_dialog_get_license_type(gtkAboutDialog); 247 } 248 249 /** 250 * Returns the pixbuf displayed as logo in the about dialog. 251 * 252 * Return: the pixbuf displayed as logo. The 253 * pixbuf is owned by the about dialog. If you want to keep a 254 * reference to it, you have to call g_object_ref() on it. 255 * 256 * Since: 2.6 257 */ 258 public Pixbuf getLogo() 259 { 260 auto p = gtk_about_dialog_get_logo(gtkAboutDialog); 261 262 if(p is null) 263 { 264 return null; 265 } 266 267 return ObjectG.getDObject!(Pixbuf)(cast(GdkPixbuf*) p); 268 } 269 270 /** 271 * Returns the icon name displayed as logo in the about dialog. 272 * 273 * Return: the icon name displayed as logo. The string is 274 * owned by the dialog. If you want to keep a reference 275 * to it, you have to call g_strdup() on it. 276 * 277 * Since: 2.6 278 */ 279 public string getLogoIconName() 280 { 281 return Str.toString(gtk_about_dialog_get_logo_icon_name(gtkAboutDialog)); 282 } 283 284 /** 285 * Returns the program name displayed in the about dialog. 286 * 287 * Return: The program name. The string is owned by the about 288 * dialog and must not be modified. 289 * 290 * Since: 2.12 291 */ 292 public string getProgramName() 293 { 294 return Str.toString(gtk_about_dialog_get_program_name(gtkAboutDialog)); 295 } 296 297 /** 298 * Returns the translator credits string which is displayed 299 * in the translators tab of the secondary credits dialog. 300 * 301 * Return: The translator credits string. The string is 302 * owned by the about dialog and must not be modified. 303 * 304 * Since: 2.6 305 */ 306 public string getTranslatorCredits() 307 { 308 return Str.toString(gtk_about_dialog_get_translator_credits(gtkAboutDialog)); 309 } 310 311 /** 312 * Returns the version string. 313 * 314 * Return: The version string. The string is owned by the about 315 * dialog and must not be modified. 316 * 317 * Since: 2.6 318 */ 319 public string getVersion() 320 { 321 return Str.toString(gtk_about_dialog_get_version(gtkAboutDialog)); 322 } 323 324 /** 325 * Returns the website URL. 326 * 327 * Return: The website URL. The string is owned by the about 328 * dialog and must not be modified. 329 * 330 * Since: 2.6 331 */ 332 public string getWebsite() 333 { 334 return Str.toString(gtk_about_dialog_get_website(gtkAboutDialog)); 335 } 336 337 /** 338 * Returns the label used for the website link. 339 * 340 * Return: The label used for the website link. The string is 341 * owned by the about dialog and must not be modified. 342 * 343 * Since: 2.6 344 */ 345 public string getWebsiteLabel() 346 { 347 return Str.toString(gtk_about_dialog_get_website_label(gtkAboutDialog)); 348 } 349 350 /** 351 * Returns whether the license text in @about is 352 * automatically wrapped. 353 * 354 * Return: %TRUE if the license text is wrapped 355 * 356 * Since: 2.8 357 */ 358 public bool getWrapLicense() 359 { 360 return gtk_about_dialog_get_wrap_license(gtkAboutDialog) != 0; 361 } 362 363 /** 364 * Sets the strings which are displayed in the artists tab 365 * of the secondary credits dialog. 366 * 367 * Params: 368 * artists = a %NULL-terminated array of strings 369 * 370 * Since: 2.6 371 */ 372 public void setArtists(string[] artists) 373 { 374 gtk_about_dialog_set_artists(gtkAboutDialog, Str.toStringzArray(artists)); 375 } 376 377 /** 378 * Sets the strings which are displayed in the authors tab 379 * of the secondary credits dialog. 380 * 381 * Params: 382 * authors = a %NULL-terminated array of strings 383 * 384 * Since: 2.6 385 */ 386 public void setAuthors(string[] authors) 387 { 388 gtk_about_dialog_set_authors(gtkAboutDialog, Str.toStringzArray(authors)); 389 } 390 391 /** 392 * Sets the comments string to display in the about dialog. 393 * This should be a short string of one or two lines. 394 * 395 * Params: 396 * comments = a comments string 397 * 398 * Since: 2.6 399 */ 400 public void setComments(string comments) 401 { 402 gtk_about_dialog_set_comments(gtkAboutDialog, Str.toStringz(comments)); 403 } 404 405 /** 406 * Sets the copyright string to display in the about dialog. 407 * This should be a short string of one or two lines. 408 * 409 * Params: 410 * copyright = the copyright string 411 * 412 * Since: 2.6 413 */ 414 public void setCopyright(string copyright) 415 { 416 gtk_about_dialog_set_copyright(gtkAboutDialog, Str.toStringz(copyright)); 417 } 418 419 /** 420 * Sets the strings which are displayed in the documenters tab 421 * of the secondary credits dialog. 422 * 423 * Params: 424 * documenters = a %NULL-terminated array of strings 425 * 426 * Since: 2.6 427 */ 428 public void setDocumenters(string[] documenters) 429 { 430 gtk_about_dialog_set_documenters(gtkAboutDialog, Str.toStringzArray(documenters)); 431 } 432 433 /** 434 * Sets the license information to be displayed in the secondary 435 * license dialog. If @license is %NULL, the license button is 436 * hidden. 437 * 438 * Params: 439 * license = the license information or %NULL 440 * 441 * Since: 2.6 442 */ 443 public void setLicense(string license) 444 { 445 gtk_about_dialog_set_license(gtkAboutDialog, Str.toStringz(license)); 446 } 447 448 /** 449 * Sets the license of the application showing the @about dialog from a 450 * list of known licenses. 451 * 452 * This function overrides the license set using 453 * gtk_about_dialog_set_license(). 454 * 455 * Params: 456 * licenseType = the type of license 457 * 458 * Since: 3.0 459 */ 460 public void setLicenseType(GtkLicense licenseType) 461 { 462 gtk_about_dialog_set_license_type(gtkAboutDialog, licenseType); 463 } 464 465 /** 466 * Sets the pixbuf to be displayed as logo in the about dialog. 467 * If it is %NULL, the default window icon set with 468 * gtk_window_set_default_icon() will be used. 469 * 470 * Params: 471 * logo = a #GdkPixbuf, or %NULL 472 * 473 * Since: 2.6 474 */ 475 public void setLogo(Pixbuf logo) 476 { 477 gtk_about_dialog_set_logo(gtkAboutDialog, (logo is null) ? null : logo.getPixbufStruct()); 478 } 479 480 /** 481 * Sets the pixbuf to be displayed as logo in the about dialog. 482 * If it is %NULL, the default window icon set with 483 * gtk_window_set_default_icon() will be used. 484 * 485 * Params: 486 * iconName = an icon name, or %NULL 487 * 488 * Since: 2.6 489 */ 490 public void setLogoIconName(string iconName) 491 { 492 gtk_about_dialog_set_logo_icon_name(gtkAboutDialog, Str.toStringz(iconName)); 493 } 494 495 /** 496 * Sets the name to display in the about dialog. 497 * If this is not set, it defaults to g_get_application_name(). 498 * 499 * Params: 500 * name = the program name 501 * 502 * Since: 2.12 503 */ 504 public void setProgramName(string name) 505 { 506 gtk_about_dialog_set_program_name(gtkAboutDialog, Str.toStringz(name)); 507 } 508 509 /** 510 * Sets the translator credits string which is displayed in 511 * the translators tab of the secondary credits dialog. 512 * 513 * The intended use for this string is to display the translator 514 * of the language which is currently used in the user interface. 515 * Using gettext(), a simple way to achieve that is to mark the 516 * string for translation: 517 * |[<!-- language="C" --> 518 * gtk_about_dialog_set_translator_credits (about, 519 * _("translator-credits")); 520 * ]| 521 * It is a good idea to use the customary msgid “translator-credits” for this 522 * purpose, since translators will already know the purpose of that msgid, and 523 * since #GtkAboutDialog will detect if “translator-credits” is untranslated 524 * and hide the tab. 525 * 526 * Params: 527 * translatorCredits = the translator credits 528 * 529 * Since: 2.6 530 */ 531 public void setTranslatorCredits(string translatorCredits) 532 { 533 gtk_about_dialog_set_translator_credits(gtkAboutDialog, Str.toStringz(translatorCredits)); 534 } 535 536 /** 537 * Sets the version string to display in the about dialog. 538 * 539 * Params: 540 * versio = the version string 541 * 542 * Since: 2.6 543 */ 544 public void setVersion(string versio) 545 { 546 gtk_about_dialog_set_version(gtkAboutDialog, Str.toStringz(versio)); 547 } 548 549 /** 550 * Sets the URL to use for the website link. 551 * 552 * Params: 553 * website = a URL string starting with "http://" 554 * 555 * Since: 2.6 556 */ 557 public void setWebsite(string website) 558 { 559 gtk_about_dialog_set_website(gtkAboutDialog, Str.toStringz(website)); 560 } 561 562 /** 563 * Sets the label to be used for the website link. 564 * 565 * Params: 566 * websiteLabel = the label used for the website link 567 * 568 * Since: 2.6 569 */ 570 public void setWebsiteLabel(string websiteLabel) 571 { 572 gtk_about_dialog_set_website_label(gtkAboutDialog, Str.toStringz(websiteLabel)); 573 } 574 575 /** 576 * Sets whether the license text in @about is 577 * automatically wrapped. 578 * 579 * Params: 580 * wrapLicense = whether to wrap the license 581 * 582 * Since: 2.8 583 */ 584 public void setWrapLicense(bool wrapLicense) 585 { 586 gtk_about_dialog_set_wrap_license(gtkAboutDialog, wrapLicense); 587 } 588 589 protected class OnActivateLinkDelegateWrapper 590 { 591 bool delegate(string, AboutDialog) dlg; 592 gulong handlerId; 593 ConnectFlags flags; 594 this(bool delegate(string, AboutDialog) dlg, gulong handlerId, ConnectFlags flags) 595 { 596 this.dlg = dlg; 597 this.handlerId = handlerId; 598 this.flags = flags; 599 } 600 } 601 protected OnActivateLinkDelegateWrapper[] onActivateLinkListeners; 602 603 /** 604 * The signal which gets emitted to activate a URI. 605 * Applications may connect to it to override the default behaviour, 606 * which is to call gtk_show_uri(). 607 * 608 * Params: 609 * uri = the URI that is activated 610 * 611 * Return: %TRUE if the link has been activated 612 * 613 * Since: 2.24 614 */ 615 gulong addOnActivateLink(bool delegate(string, AboutDialog) dlg, ConnectFlags connectFlags=cast(ConnectFlags)0) 616 { 617 onActivateLinkListeners ~= new OnActivateLinkDelegateWrapper(dlg, 0, connectFlags); 618 onActivateLinkListeners[onActivateLinkListeners.length - 1].handlerId = Signals.connectData( 619 this, 620 "activate-link", 621 cast(GCallback)&callBackActivateLink, 622 cast(void*)onActivateLinkListeners[onActivateLinkListeners.length - 1], 623 cast(GClosureNotify)&callBackActivateLinkDestroy, 624 connectFlags); 625 return onActivateLinkListeners[onActivateLinkListeners.length - 1].handlerId; 626 } 627 628 extern(C) static int callBackActivateLink(GtkAboutDialog* aboutdialogStruct, char* uri,OnActivateLinkDelegateWrapper wrapper) 629 { 630 return wrapper.dlg(Str.toString(uri), wrapper.outer); 631 } 632 633 extern(C) static void callBackActivateLinkDestroy(OnActivateLinkDelegateWrapper wrapper, GClosure* closure) 634 { 635 wrapper.outer.internalRemoveOnActivateLink(wrapper); 636 } 637 638 protected void internalRemoveOnActivateLink(OnActivateLinkDelegateWrapper source) 639 { 640 foreach(index, wrapper; onActivateLinkListeners) 641 { 642 if (wrapper.dlg == source.dlg && wrapper.flags == source.flags && wrapper.handlerId == source.handlerId) 643 { 644 onActivateLinkListeners[index] = null; 645 onActivateLinkListeners = std.algorithm.remove(onActivateLinkListeners, index); 646 break; 647 } 648 } 649 } 650 651 }