Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
expander.c
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2015 Roman Lebedev.
4 Copyright (C) 2016 Tobias Ellinghaus.
5 Copyright (C) 2020 Chris Elston.
6 Copyright (C) 2020 Heiko Bauke.
7 Copyright (C) 2020-2021 Pascal Obry.
8 Copyright (C) 2021 Diederik Ter Rahe.
9 Copyright (C) 2022 Martin Baƙinka.
10
11 darktable is free software: you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation, either version 3 of the License, or
14 (at your option) any later version.
15
16 darktable is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with darktable. If not, see <http://www.gnu.org/licenses/>.
23*/
24
25#include "dtgtk/expander.h"
26
27#include <gtk/gtk.h>
28
29G_DEFINE_TYPE(GtkDarktableExpander, dtgtk_expander, GTK_TYPE_BOX);
30
34
36{
37 g_return_val_if_fail(DTGTK_IS_EXPANDER(expander), NULL);
38
39 return expander->frame;
40}
41
43{
44 g_return_val_if_fail(DTGTK_IS_EXPANDER(expander), NULL);
45
46 return expander->header;
47}
48
50{
51 g_return_val_if_fail(DTGTK_IS_EXPANDER(expander), NULL);
52
53 return expander->header_evb;
54}
55
57{
58 g_return_val_if_fail(DTGTK_IS_EXPANDER(expander), NULL);
59
60 return expander->body;
61}
62
64{
65 g_return_val_if_fail(DTGTK_IS_EXPANDER(expander), NULL);
66
67 return expander->body_evb;
68}
69
70void dtgtk_expander_set_expanded(GtkDarktableExpander *expander, gboolean expanded)
71{
72 g_return_if_fail(DTGTK_IS_EXPANDER(expander));
73
74 expanded = expanded != FALSE;
75
76 if(expander->expanded != expanded)
77 {
78 expander->expanded = expanded;
79
80 GtkWidget *frame = expander->body;
81
82 if(frame)
83 {
84 gtk_widget_set_visible(frame, expander->expanded);
85 }
86 }
87}
88
90{
91 g_return_val_if_fail(DTGTK_IS_EXPANDER(expander), FALSE);
92
93 return expander->expanded;
94}
95
97{
98}
99
100// public functions
102{
103 GtkDarktableExpander *expander;
104
105 g_return_val_if_fail(GTK_IS_WIDGET(header), NULL);
106 g_return_val_if_fail(GTK_IS_WIDGET(body), NULL);
107
108 expander
109 = g_object_new(dtgtk_expander_get_type(), "orientation", GTK_ORIENTATION_VERTICAL, "spacing", 0, NULL);
110 expander->expanded = -1;
111 expander->header = header;
112 expander->body = body;
113
114 expander->header_evb = gtk_event_box_new();
115 gtk_container_add(GTK_CONTAINER(expander->header_evb), expander->header);
116 expander->body_evb = gtk_event_box_new();
117 gtk_container_add(GTK_CONTAINER(expander->body_evb), expander->body);
118 expander->frame = gtk_frame_new(NULL);
119 gtk_container_add(GTK_CONTAINER(expander->frame), expander->body_evb);
120
121 gtk_box_pack_start(GTK_BOX(expander), expander->header_evb, TRUE, FALSE, 0);
122 gtk_box_pack_start(GTK_BOX(expander), expander->frame, TRUE, FALSE, 0);
123
124 return GTK_WIDGET(expander);
125}
126
127// clang-format off
128// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
129// vim: shiftwidth=2 expandtab tabstop=2 cindent
130// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
131// clang-format on
132
#define TRUE
Definition ashift_lsd.c:162
#define FALSE
Definition ashift_lsd.c:158
GtkWidget * dtgtk_expander_get_header_event_box(GtkDarktableExpander *expander)
Definition expander.c:49
static void dtgtk_expander_class_init(GtkDarktableExpanderClass *class)
Definition expander.c:31
G_DEFINE_TYPE(GtkDarktableExpander, dtgtk_expander, GTK_TYPE_BOX)
gboolean dtgtk_expander_get_expanded(GtkDarktableExpander *expander)
Definition expander.c:89
GtkWidget * dtgtk_expander_get_header(GtkDarktableExpander *expander)
Definition expander.c:42
GtkWidget * dtgtk_expander_get_body_event_box(GtkDarktableExpander *expander)
Definition expander.c:63
static void dtgtk_expander_init(GtkDarktableExpander *expander)
Definition expander.c:96
GtkWidget * dtgtk_expander_get_frame(GtkDarktableExpander *expander)
Definition expander.c:35
GtkWidget * dtgtk_expander_get_body(GtkDarktableExpander *expander)
Definition expander.c:56
void dtgtk_expander_set_expanded(GtkDarktableExpander *expander, gboolean expanded)
Definition expander.c:70
GtkWidget * dtgtk_expander_new(GtkWidget *header, GtkWidget *body)
Definition expander.c:101
GType dtgtk_expander_get_type(void)
#define DTGTK_IS_EXPANDER(obj)
Definition expander.h:31
struct _GtkWidget GtkWidget
Definition splash.h:29
GtkWidget * body_evb
Definition expander.h:46
GtkWidget * header_evb
Definition expander.h:44
GtkWidget * header
Definition expander.h:43
GtkWidget * frame
Definition expander.h:42
GtkWidget * body
Definition expander.h:45