/[zanavi_public1]/navit/navit/gui.c
ZANavi

Contents of /navit/navit/gui.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (show annotations) (download)
Fri Oct 28 21:19:04 2011 UTC (12 years, 5 months ago) by zoff99
File MIME type: text/plain
File size: 4281 byte(s)
import files
1 /**
2 * Navit, a modular navigation system.
3 * Copyright (C) 2005-2008 Navit Team
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * version 2 as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
20 #include <glib.h>
21 #include <string.h>
22 #include "debug.h"
23 #include "callback.h"
24 #include "gui.h"
25 #include "menu.h"
26 #include "data_window.h"
27 #include "item.h"
28 #include "plugin.h"
29
30 struct gui {
31 struct gui_methods meth;
32 struct gui_priv *priv;
33 struct attr **attrs;
34 struct attr parent;
35 };
36
37 struct gui *
38 gui_new(struct attr *parent, struct attr **attrs)
39 {
40 struct gui *this_;
41 struct attr *type_attr;
42 struct gui_priv *(*guitype_new)(struct navit *nav, struct gui_methods *meth, struct attr **attrs, struct gui *gui);
43 struct attr cbl;
44 if (! (type_attr=attr_search(attrs, NULL, attr_type))) {
45 return NULL;
46 }
47
48 guitype_new=plugin_get_gui_type(type_attr->u.str);
49 if (! guitype_new)
50 return NULL;
51
52 this_=g_new0(struct gui, 1);
53 this_->attrs=attr_list_dup(attrs);
54 cbl.type=attr_callback_list;
55 cbl.u.callback_list=callback_list_new();
56 this_->attrs=attr_generic_add_attr(this_->attrs, &cbl);
57 this_->priv=guitype_new(parent->u.navit, &this_->meth, this_->attrs, this_);
58 this_->parent=*parent;
59 return this_;
60 }
61
62 int
63 gui_get_attr(struct gui *this_, enum attr_type type, struct attr *attr, struct attr_iter *iter)
64 {
65 int ret;
66 if (this_->meth.get_attr) {
67 ret=this_->meth.get_attr(this_->priv, type, attr);
68 if (ret)
69 return ret;
70 }
71 if (type == this_->parent.type) {
72 *attr=this_->parent;
73 return 1;
74 }
75 return attr_generic_get_attr(this_->attrs, NULL, type, attr, iter);
76 }
77
78
79 int
80 gui_set_attr(struct gui *this_, struct attr *attr)
81 {
82 int ret=1;
83 if (this_->meth.set_attr)
84 ret=this_->meth.set_attr(this_->priv, attr);
85 if (ret == 1)
86 this_->attrs=attr_generic_set_attr(this_->attrs, attr);
87 return ret != 0;
88 }
89
90 int
91 gui_add_attr(struct gui *this_, struct attr *attr)
92 {
93 int ret=0;
94 if (this_->meth.add_attr)
95 ret=this_->meth.add_attr(this_->priv, attr);
96 return ret;
97 }
98
99 struct menu *
100 gui_menubar_new(struct gui *gui)
101 {
102 struct menu *this_;
103 if (! gui->meth.menubar_new)
104 return NULL;
105 this_=g_new0(struct menu, 1);
106 this_->priv=gui->meth.menubar_new(gui->priv, &this_->meth);
107 if (! this_->priv) {
108 g_free(this_);
109 return NULL;
110 }
111 return this_;
112 }
113
114 struct menu *
115 gui_popup_new(struct gui *gui)
116 {
117 struct menu *this_;
118 if (! gui->meth.popup_new)
119 return NULL;
120 this_=g_new0(struct menu, 1);
121 this_->priv=gui->meth.popup_new(gui->priv, &this_->meth);
122 if (! this_->priv) {
123 g_free(this_);
124 return NULL;
125 }
126 return this_;
127 }
128
129 struct datawindow *
130 gui_datawindow_new(struct gui *gui, char *name, struct callback *click, struct callback *close)
131 {
132 struct datawindow *this_;
133 if (! gui->meth.datawindow_new)
134 return NULL;
135 this_=g_new0(struct datawindow, 1);
136 this_->priv=gui->meth.datawindow_new(gui->priv, name, click, close, &this_->meth);
137 if (! this_->priv) {
138 g_free(this_);
139 return NULL;
140 }
141 return this_;
142 }
143
144 int
145 gui_add_bookmark(struct gui *gui, struct pcoord *c, char *description)
146 {
147 int ret;
148 dbg(2,"enter\n");
149 if (! gui->meth.add_bookmark)
150 return 0;
151 ret=gui->meth.add_bookmark(gui->priv, c, description);
152
153 dbg(2,"ret=%d\n", ret);
154 return ret;
155 }
156
157 int
158 gui_set_graphics(struct gui *this_, struct graphics *gra)
159 {
160 if (! this_->meth.set_graphics)
161 return 1;
162 return this_->meth.set_graphics(this_->priv, gra);
163 }
164
165 void
166 gui_disable_suspend(struct gui *this_)
167 {
168 if (this_->meth.disable_suspend)
169 this_->meth.disable_suspend(this_->priv);
170 }
171
172 int
173 gui_has_main_loop(struct gui *this_)
174 {
175 if (! this_->meth.run_main_loop)
176 return 0;
177 return 1;
178 }
179
180 int
181 gui_run_main_loop(struct gui *this_)
182 {
183 if (! gui_has_main_loop(this_))
184 return 1;
185 return this_->meth.run_main_loop(this_->priv);
186 }
187

   
Visit the ZANavi Wiki