dialog_initial.c

Go to the documentation of this file.
00001 /***************************************************************************
00002  *            dialog_initial.c
00003  *
00004  *  Fri Aug 25 10:56:18 2006
00005  *  Copyright  2006-2007  Neil Williams
00006  *  linux@codehelp.co.uk
00007  ****************************************************************************/
00014 /*
00015     This package is free software; you can redistribute it and/or modify
00016     it under the terms of the GNU General Public License as published by
00017     the Free Software Foundation; either version 3 of the License, or
00018     (at your option) any later version.
00019 
00020     This program is distributed in the hope that it will be useful,
00021     but WITHOUT ANY WARRANTY; without even the implied warranty of
00022     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023     GNU General Public License for more details.
00024 
00025     You should have received a copy of the GNU General Public License
00026     along with this program.  If not, see <http://www.gnu.org/licenses/>.
00027  */
00028 
00029 #include "config.h"
00030 #include <glib.h>
00031 #include <gtk/gtk.h>
00032 #include <gtkextra/gtksheet.h>
00033 #include "types.h"
00034 #include "field.h"
00035 #include "dialog_initial.h"
00036 #include "menus.h"
00037 #include "dim_list_menu.h"
00038 #include "fileout.h"
00039 
00040 void
00041 main_window (QlContext * qlc)
00042 {
00043     GtkNotebook * notebook;
00044     /* BOX that fills the list window */
00045     GtkWidget *list_vbox;
00046     /* widget inside menu_box */
00047     GtkWidget *list_mb;
00048     GtkWidget *data_box;
00049     GtkWidget *qlstatusbar;
00050     GdkPixbuf * qlpixbuf;
00051     GError * qlerr;
00052     gchar * pixpath;
00053 
00054     qlc->parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
00055     g_signal_connect (qlc->parent, "delete_event",
00056         G_CALLBACK (file_exit), qlc->parent);
00057     g_signal_connect (qlc->parent, "destroy",
00058         G_CALLBACK (file_exit), qlc->parent);
00059     /* associate the context with the parent window. */
00060     g_object_set_data (G_OBJECT(qlc->parent),
00061         QLCONTEXT, qlc);
00062     gtk_window_set_position (GTK_WINDOW (qlc->parent),
00063         GTK_WIN_POS_NONE);
00064     gtk_window_set_resizable (GTK_WINDOW (qlc->parent), TRUE);
00066 /*  if (!tab->view->width || !tab->view->height || !tab->view->x || !tab->view->y)
00067     {
00068         tab->view->width = 600;
00069         tab->view->height = 400;
00070         tab->view->x = 100;
00071         tab->view->y = 100;
00072     }
00073     set_window_size_loc (tab->qlc->parent);
00074 */
00075     gtk_widget_set_size_request (qlc->parent, 600, 400);
00076 
00077     list_mb = build_list_mb (qlc);
00078     list_vbox = gtk_vbox_new (FALSE, 0);
00079     gtk_container_add (GTK_CONTAINER (qlc->parent), list_vbox);
00080     gtk_box_pack_start (GTK_BOX (list_vbox), list_mb, FALSE, TRUE, 0);
00081     qlerr = NULL;
00082     qlc->recent_manager = gtk_recent_manager_new ();
00083 
00084     pixpath = g_strconcat (PIXMAPDIR, "/quicklist.xpm", NULL);
00085     qlpixbuf = gdk_pixbuf_new_from_file (pixpath, &qlerr);
00086     g_free (pixpath);
00087     if (qlpixbuf)
00088     {
00089         gtk_window_set_icon (GTK_WINDOW (qlc->parent), qlpixbuf);
00090         gdk_pixbuf_unref (qlpixbuf);
00091     }
00092 
00093     /* make sheet and add to scroll_win */
00094     data_box = gtk_vbox_new (FALSE, 0);
00095     gtk_box_pack_start (GTK_BOX (list_vbox), data_box, FALSE, TRUE, 0);
00096     notebook = GTK_NOTEBOOK(gtk_notebook_new());
00097     qlc->notebook = notebook;
00098     gtk_notebook_set_scrollable (qlc->notebook, TRUE);
00099     gtk_notebook_popup_enable (qlc->notebook);
00100     gtk_notebook_set_tab_pos (qlc->notebook, GTK_POS_TOP);
00101     gtk_box_pack_start (GTK_BOX(list_vbox),
00102         GTK_WIDGET (qlc->notebook), TRUE, TRUE, 0);
00103     qlstatusbar = gtk_statusbar_new ();
00104     gtk_box_pack_end (GTK_BOX (list_vbox), qlstatusbar, FALSE, FALSE, 0);
00105     gtk_widget_show_all (qlc->parent);
00106     dim_all_menus (qlc);
00107 }
00108 
00110 QlContext *
00111 ql_context_init (void)
00112 {
00113     QlContext * qlc;
00114 
00115     qlc = g_new0 (QlContext, 1);
00116     qlc->tab_table = g_hash_table_new (g_direct_hash, g_direct_equal);
00117     return qlc;
00118 }
00119 
00127 QlContext *
00128 ql_get_context (GtkWidget * widget)
00129 {
00130     QlContext * qlc;
00131     GtkWidget *toplevel;
00132 
00133     g_return_val_if_fail (widget, NULL);
00134     toplevel = gtk_widget_get_toplevel (GTK_WIDGET(widget));
00135     if (!toplevel)
00136         return NULL;
00137     if (GTK_WIDGET_TOPLEVEL (toplevel))
00138     {
00139         qlc = (QlContext*) g_object_get_data (G_OBJECT(toplevel), QLCONTEXT);
00140         return qlc;
00141     }
00142     return NULL;
00143 }
00144 
00145 static gboolean
00146 ql_filedata_new (QlTabData * tab)
00147 {
00148     g_return_val_if_fail (tab, FALSE);
00149     tab->file = g_new0 (QlFileData, 1);
00150     tab->file->fields = g_hash_table_new (g_direct_hash, g_direct_equal);
00151     return TRUE;
00152 }
00153 
00154 static gboolean
00155 ql_viewdata_new (QlTabData * tab)
00156 {
00157     g_return_val_if_fail (tab, FALSE);
00158     tab->view = g_new0 (QlViewData, 1);
00159 
00160     return TRUE;
00161 }
00162 
00168 QlTabData *
00169 ql_new_tabdata (QlContext * qlc)
00170 {
00171     QlTabData * tab;
00172     gint nindex;
00173 
00174     nindex = 0;
00175     tab = g_new0 (QlTabData, 1);
00176     g_return_val_if_fail (ql_viewdata_new (tab), NULL);
00177     g_return_val_if_fail (ql_filedata_new (tab), NULL);
00178     tab->qlc = qlc;
00179     nindex = gtk_notebook_get_n_pages (qlc->notebook);
00180     g_hash_table_insert (qlc->tab_table, GINT_TO_POINTER(nindex), tab);
00181     return tab;
00182 }
00183 
00189 QlFileData *
00190 ql_get_filedata (QlContext * qlc)
00191 {
00192     gint index;
00193     QlTabData * tab;
00194 
00195     g_return_val_if_fail (qlc, NULL);
00196     g_return_val_if_fail (qlc->notebook, NULL);
00197     index = gtk_notebook_get_current_page (qlc->notebook);
00198     if (index < 0)
00199         return NULL;
00200     tab = (QlTabData*)g_hash_table_lookup (qlc->tab_table,
00201         GINT_TO_POINTER(index));
00202     return tab->file;
00203 }
00204 
00205 QlViewData *
00206 ql_get_viewdata (QlContext * qlc)
00207 {
00208     gint index;
00209     QlTabData * tab;
00210 
00211     g_return_val_if_fail (qlc, NULL);
00212     g_return_val_if_fail (qlc->notebook, NULL);
00213     index = gtk_notebook_get_current_page (qlc->notebook);
00214     if (index < 0)
00215         return NULL;
00216     tab = (QlTabData*)g_hash_table_lookup (qlc->tab_table,
00217         GINT_TO_POINTER(index));
00218     return tab->view;
00219 }
00220 
00221 QlTabData *
00222 ql_get_tabdata (QlContext * qlc)
00223 {
00224     gint index;
00225     QlTabData * tab;
00226 
00227     g_return_val_if_fail (qlc, NULL);
00228     g_return_val_if_fail (qlc->notebook, NULL);
00229     index = gtk_notebook_get_current_page (qlc->notebook);
00230     if (index < 0)
00231         return NULL;
00232     tab = (QlTabData*)g_hash_table_lookup (qlc->tab_table,
00233         GINT_TO_POINTER(index));
00234     return tab;
00235 }
00236 
00237 QlFieldInfo *
00238 ql_get_fieldinfo (QlTabData * tab, gint field_index)
00239 {
00240     QlFieldInfo * field;
00241 
00242     g_return_val_if_fail (tab, NULL);
00243     field = (QlFieldInfo*)g_hash_table_lookup (tab->file->fields,
00244         GINT_TO_POINTER(field_index));
00245     return field;
00246 }
00247 
00248 gboolean
00249 ql_add_fieldinfo (QlTabData * tab, QlFieldInfo * field)
00250 {
00251     gint size;
00252     g_return_val_if_fail (tab, FALSE);
00253     g_return_val_if_fail (field, FALSE);
00254     size = g_hash_table_size (tab->file->fields);
00255     g_hash_table_insert (tab->file->fields, GINT_TO_POINTER(size) ,field);
00256     return TRUE;
00257 }
00258 
00259 gboolean
00260 ql_set_fieldinfo (QlTabData * tab, QlFieldInfo * field, gint field_index)
00261 {
00262     g_return_val_if_fail (tab, FALSE);
00263     g_return_val_if_fail (field, FALSE);
00264     g_return_val_if_fail (g_hash_table_lookup(tab->file->fields,
00265         GINT_TO_POINTER(field_index)), FALSE);
00266     g_hash_table_replace (tab->file->fields, GINT_TO_POINTER (field_index), field);
00267     return TRUE;
00268 }
00269 
00270 void
00271 ql_remove_fieldinfo (QlTabData * tab, gint field_index)
00272 {
00273     g_return_if_fail (tab);
00274     g_return_if_fail (g_hash_table_lookup(tab->file->fields,
00275         GINT_TO_POINTER(field_index)));
00276     g_hash_table_remove (tab->file->fields, GINT_TO_POINTER (field_index));
00277 }
00278 
00279 gint
00280 ql_get_last_field (QlTabData * tab)
00281 {
00282     g_return_val_if_fail (tab, -1);
00283     return g_hash_table_size (tab->file->fields);
00284 }
00285 
00286 void
00287 ql_fieldinfo_foreach (QlTabData * tab, QlFieldInfoCB cb, gpointer user_data)
00288 {
00289     g_return_if_fail (tab);
00290     g_hash_table_foreach (tab->file->fields, cb, user_data);
00291 }
00292 
00293 void
00294 ql_free_context (QlContext *qlc)
00295 {
00296     g_return_if_fail (qlc);
00297     g_hash_table_destroy (qlc->tab_table);
00298     g_object_unref (qlc->recent_manager);
00299 }

Generated on Mon Jan 28 22:02:10 2008 for quicklist by  doxygen 1.5.4