## TeplAbstractFactory TeplAbstractFactory — Abstract factory singleton class |

## Functions

void | tepl_abstract_factory_set_singleton ()
TeplAbstractFactory * | tepl_abstract_factory_get_singleton ()
GtkApplicationWindow * | tepl_abstract_factory_create_main_window ()
TeplTab * | tepl_abstract_factory_create_tab ()
GtkWidget * | tepl_abstract_factory_create_tab_label ()
TeplFile * | tepl_abstract_factory_create_file ()

## Types and Values

| TeplAbstractFactory
struct | TeplAbstractFactoryClass

## Object Hierarchy

        GObject
        ╰── TeplAbstractFactory
            ╰── TeplAbstractFactoryVala

## Includes

    #include <tepl/tepl.h>

## Description

The Tepl framework uses the TeplAbstractFactory singleton to create some objects and widgets. By creating a subclass of TeplAbstractFactory (to override the desired virtual functions) and setting the instance with `tepl_abstract_factory_set_singleton()`, an application can tell Tepl to create custom objects and widgets.

Note that GtkTextViewClass has the ::create_buffer factory method, that TeplView overrides to create a TeplBuffer. How the TeplView and TeplBuffer are created can be customized with the ::create_tab vfunc of TeplAbstractFactory.

Recommendation for the subclass name: in Tepl, TeplAbstractFactory is an abstract class, but in an application it is a concrete class. So “MyappAbstractFactory” is not a good name for a TeplAbstractFactory subclass. “MyappFactory” is a better name (of course change “Myapp” with the application namespace).

For an application written in Vala, see TeplAbstractFactoryVala.

## Functions

### tepl_abstract_factory_set_singleton ()

    void
    tepl_abstract_factory_set_singleton (TeplAbstractFactory *factory);

Sets the TeplAbstractFactory singleton. This should be called early in `main()`, for example just after calling `tepl_init()`.

This function must be called only once, before the first call to `tepl_abstract_factory_get_singleton()`.

Tepl takes ownership of the `factory` reference.

#### Parameters

factory | a TeplAbstractFactory. | [transfer full]

Since: 3.0

### tepl_abstract_factory_get_singleton ()

    TeplAbstractFactory *
    tepl_abstract_factory_get_singleton (void);

Gets the TeplAbstractFactory singleton instance.

If `tepl_abstract_factory_set_singleton()` has not been called, the singleton is created with a TeplAbstractFactory instance.

#### Returns

the TeplAbstractFactory singleton instance.

[transfer none]

Since: 3.0

### tepl_abstract_factory_create_main_window ()

    GtkApplicationWindow *
    tepl_abstract_factory_create_main_window
                                   (TeplAbstractFactory *factory,
                                    GtkApplication *app);

Creates a main GtkApplicationWindow in the sense of `tepl_application_window_is_main_window()`.

#### Parameters

factory | the TeplAbstractFactory. |
app | a GtkApplication. |

#### Returns

a new main application window, or `NULL` if the vfunc is not implemented.

[transfer floating][nullable]

### tepl_abstract_factory_create_tab ()

    TeplTab *
    tepl_abstract_factory_create_tab (TeplAbstractFactory *factory);

#### Parameters

factory | the TeplAbstractFactory. |

#### Returns

a new TeplTab.

[transfer floating]

Since: 3.0

### tepl_abstract_factory_create_tab_label ()

    GtkWidget *
    tepl_abstract_factory_create_tab_label
                                   (TeplAbstractFactory *factory,
                                    TeplTab *tab);

Creates a new tab label for `tab` , suitable for `gtk_notebook_set_tab_label()`.

#### Parameters

factory | the TeplAbstractFactory. |
tab | a TeplTab. |

#### Returns

a new GtkWidget, or `NULL` for the default tab label (“page N” with GtkNotebook).

[transfer floating][nullable]

Since: 3.0

### tepl_abstract_factory_create_file ()

    TeplFile *
    tepl_abstract_factory_create_file (TeplAbstractFactory *factory);

#### Parameters

factory | the TeplAbstractFactory. |

#### Returns

a new TeplFile.

[transfer full]

Since: 4.0

## Types and Values

### TeplAbstractFactory

    typedef struct _TeplAbstractFactory TeplAbstractFactory;

### struct TeplAbstractFactoryClass

    struct TeplAbstractFactoryClass {
    	GObjectClass parent_class;

    	GtkApplicationWindow * (* create_main_window) (TeplAbstractFactory *factory,
    							 GtkApplication      *app);

    	TeplTab *		(* create_tab)		(TeplAbstractFactory *factory);

    	GtkWidget *		(* create_tab_label) (TeplAbstractFactory *factory,
    							 TeplTab             *tab);

    	TeplFile *		(* create_file)		(TeplAbstractFactory *factory);
    };

#### Members

`create_main_window` () | Virtual function pointer for `tepl_abstract_factory_create_main_window()`. It is not implemented by default. |
`create_tab` () | Virtual function pointer for `tepl_abstract_factory_create_tab()`. By default the TeplTab is created with `tepl_tab_new()`. |
`create_tab_label` () | Virtual function pointer for `tepl_abstract_factory_create_tab_label()`. By default the tab label is created with `tepl_tab_label_new()`. |
`create_file` () | Virtual function pointer for `tepl_abstract_factory_create_file()`. By default the TeplFile is created with `tepl_file_new()`. |