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

Contents of /navit/navit/gui.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (hide 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 zoff99 2 /**
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