Building apps *on* the neo1973 ..

Robert Schuster r.schuster at tarent.de
Wed Dec 5 19:05:53 CET 2007


Hi,
cool idea. Now bring OpenEmbedded on the device and one can compile new
packages or images overnight when not at home. :)

Regards
Robert

Jay Vaughan schrieb:
> 
> Okay, today for a bit of early morning fun I set up a dev environment on
> my neo1973:
> 
> root at fic-gta01:/media/card/hak$ time gcc -I/usr/include
> -I/usr/include/cairo -I/usr/include/gtk-2.0 -I/usr/include/glib-2.0
> -I/usr/lib/glib-2.0/include -I/usr/include/pango-1.0
> -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 gtkhello.c -L/usr/lib
> -lgtk-x11-2.0 -o gtkhello
> real    0m 10.79s
> user    0m 9.10s
> sys     0m 1.07s
> 
> Only 10 seconds to build a fairly basic gtk app with two panes and lots
> of buttons .. pretty nice i must say!  And it works great!
> 
> The only thing left to do now is fix up the .pc files in
> /usr/lib/pkgconfig so that i can make a proper smart Makefile, and away
> we go with a truly portable development environment on my phone, in my
> pocket.  Great fun!
> 
> root at fic-gta01:/media/card/hak$ ls -alF gtkhello
> -rwxr-xr-x    1 root     root        19004 Dec  1 03:08 gtkhello*
> 
> Not too shabby!
> 
> Some more details, in case anyone is interested:
> 
> root at fic-gta01:/media/card/hak$ df -h
> 
> Filesystem                Size      Used Available Use% Mounted on
> /dev/mmcblk0p1          473.0M    295.7M    152.9M  66% /
> tmpfs                    40.0k         0     40.0k   0% /mnt/.psplash
> /dev/mmcblk0p1          473.0M    295.7M    152.9M  66% /dev/.static/dev
> tmpfs                     2.0M     64.0k      1.9M   3% /dev
> /dev/mmcblk0p2          458.4M    360.7M     74.0M  83% /media/card
> tmpfs                    61.9M     48.0k     61.8M   0% /tmp
> tmpfs                    61.9M    152.0k     61.7M   0% /var/volatile
> tmpfs                    61.9M     12.0k     61.9M   0% /dev/shm
> tmpfs                    61.9M         0     61.9M   0% /media/ram
> 
> root at fic-gta01:/media/card/hak$ mount
> 
> rootfs on / type rootfs (rw)
> /dev/root on / type ext3 (rw,noatime,data=ordered)
> proc on /proc type proc (rw)
> tmpfs on /mnt/.psplash type tmpfs (rw)
> sysfs on /sys type sysfs (rw)
> /dev/root on /dev/.static/dev type ext3 (rw,data=ordered)
> tmpfs on /dev type tmpfs (rw)
> /dev/mmcblk0p2 on /media/card type ext3 (rw,data=ordered)
> tmpfs on /tmp type tmpfs (rw)
> tmpfs on /var/volatile type tmpfs (rw)
> tmpfs on /dev/shm type tmpfs (rw)
> tmpfs on /media/ram type tmpfs (rw)
> devpts on /dev/pts type devpts (rw)
> 
> root at fic-gta01:/media/card/hak$ cat gtkhello.c
> 
> /*
>  * Copyright (C) 2007 OpenedHand Ltd
>  *
>  * This program is free software; you can redistribute it and/or modify
> it under
>  * the terms of the GNU General Public License as published by the Free
> Software
>  * Foundation; either version 2 of the License, or (at your option) any
> later
>  * version.
>  *
>  * This program is distributed in the hope that it will be useful, but
> WITHOUT
>  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> FITNESS
>  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
>  * details.
>  *
>  * You should have received a copy of the GNU General Public License
> along with
>  * this program; if not, write to the Free Software Foundation, Inc., 51
>  * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
>  */
> 
> #include <gtk/gtk.h>
> 
> 
> /* type definitions */
> 
> typedef struct
> {
>   GtkWidget *search_entry;
>   GtkWidget *filter_combo;
> } ApplicationData;
> 
> /* signal callbacks */
> 
> static void search_toggle_cb (GtkWidget * button, ApplicationData * data);
> 
> int
> main (int argc, char **argv)
> {
>   GtkWidget *window, *notebook, *icon;
>   GtkWidget *box, *hbox, *toolbar, *details, *navigation, *w;
>   GtkTreeViewColumn *column;
>   GtkWidget *widget;
>   GtkToolItem *toolitem;
>   GtkListStore *liststore;
>   GtkTreeIter it;
>   ApplicationData *data;
> 
>   gtk_init (&argc, &argv);
> 
>   data = g_new0 (ApplicationData, 1);
> 
>   /* main window */
>   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
>   g_signal_connect (G_OBJECT (window), "delete-event",
>                     (GCallback) gtk_main_quit, NULL);
>   gtk_window_set_title (GTK_WINDOW (window), "Example");
> 
>   /* main notebook */
>   notebook = gtk_notebook_new ();
>   gtk_container_add (GTK_CONTAINER (window), notebook);
>   gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_BOTTOM);
> 
>   /* navigation */
>   box = gtk_vbox_new (FALSE, 0);
>   gtk_notebook_append_page (GTK_NOTEBOOK (notebook), box,
>                             gtk_image_new_from_stock (GTK_STOCK_INDEX,
>                                                      
> GTK_ICON_SIZE_LARGE_TOOLBAR));
>   gtk_container_child_set (GTK_CONTAINER (notebook), box, "tab-expand",
>                            TRUE, NULL);
> 
>   /* toolbar */
>   toolbar = gtk_toolbar_new ();
>   gtk_box_pack_start (GTK_BOX (box), toolbar, FALSE, FALSE, 0);
> 
>   toolitem = gtk_tool_button_new_from_stock (GTK_STOCK_NEW);
>   gtk_tool_item_set_expand (toolitem, TRUE);
>   gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, 0);
> 
>   gtk_toolbar_insert (GTK_TOOLBAR (toolbar), gtk_separator_tool_item_new
> (),
>                       1);
> 
>   toolitem = gtk_tool_button_new_from_stock (GTK_STOCK_DELETE);
>   gtk_tool_item_set_expand (toolitem, TRUE);
>   gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, 2);
> 
>   /* search/filter bar */
>   hbox = gtk_hbox_new (FALSE, 0);
>   gtk_box_pack_start (GTK_BOX (box), hbox, FALSE, FALSE, 0);
> 
>   w = gtk_toggle_button_new ();
>   gtk_widget_set_name (w, "mokosearchbutton");
>   g_signal_connect (G_OBJECT (w), "toggled", (GCallback) search_toggle_cb,
>                     data);
>   gtk_button_set_image (GTK_BUTTON (w),
>                         gtk_image_new_from_stock (GTK_STOCK_FIND,
>                                                  
> GTK_ICON_SIZE_SMALL_TOOLBAR));
>   gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0);
> 
>   data->search_entry = gtk_entry_new ();
>   gtk_widget_set_name (data->search_entry, "mokosearchentry");
>   g_object_set (G_OBJECT (data->search_entry), "no-show-all", TRUE, NULL);
>   gtk_box_pack_start (GTK_BOX (hbox), data->search_entry, TRUE, TRUE, 0);
> 
>   data->filter_combo = gtk_combo_box_new_text ();
>   gtk_combo_box_append_text (GTK_COMBO_BOX (data->filter_combo),
>                              "Filter Menu");
>   gtk_combo_box_append_text (GTK_COMBO_BOX (data->filter_combo), "Small");
>   gtk_combo_box_append_text (GTK_COMBO_BOX (data->filter_combo), "Medium");
>   gtk_combo_box_append_text (GTK_COMBO_BOX (data->filter_combo), "Large");
>   gtk_combo_box_set_active (GTK_COMBO_BOX (data->filter_combo), 0);
>   gtk_box_pack_start (GTK_BOX (hbox), data->filter_combo, TRUE, TRUE, 0);
> 
> 
>   /* list */
>   w = gtk_scrolled_window_new (NULL, NULL);
>   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (w),
>                                   GTK_POLICY_AUTOMATIC,
> GTK_POLICY_AUTOMATIC);
>   gtk_box_pack_start (GTK_BOX (box), w, TRUE, TRUE, 0);
> 
> 
>   liststore = gtk_list_store_new (1, G_TYPE_STRING);
>   gtk_list_store_insert_with_values (liststore, &it, 0, 0, "One", -1);
>   gtk_list_store_insert_with_values (liststore, &it, 1, 0, "Two", -1);
>   gtk_list_store_insert_with_values (liststore, &it, 2, 0, "Skip a few",
> -1);
>   gtk_list_store_insert_with_values (liststore, &it, 3, 0, "Ninety
> Nine", -1);
>   gtk_list_store_insert_with_values (liststore, &it, 4, 0, "One
> Hundred", -1);
> 
>   navigation = gtk_tree_view_new_with_model (GTK_TREE_MODEL (liststore));
>   column = gtk_tree_view_column_new_with_attributes ("Counting",
>                                                     
> gtk_cell_renderer_text_new
>                                                      (), "text", 0, NULL);
>   gtk_tree_view_append_column (GTK_TREE_VIEW (navigation), column);
>   gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (navigation), FALSE);
>   gtk_container_add (GTK_CONTAINER (w), navigation);
> 
> 
>   /* details */
>   details = gtk_vbox_new (FALSE, 6);
> 
>   widget = gtk_entry_new ();
>   gtk_entry_set_text (GTK_ENTRY (widget), "Hello, I am an entry");
>   gtk_box_pack_start (GTK_BOX (details), widget, FALSE, FALSE, 0);
> 
>   widget = gtk_button_new_from_stock (GTK_STOCK_ADD);
>   gtk_box_pack_start (GTK_BOX (details), widget, FALSE, FALSE, 0);
> 
>   widget = gtk_check_button_new_with_label ("Checkbutton");
>   gtk_box_pack_start (GTK_BOX (details), widget, FALSE, FALSE, 0);
> 
>   widget = gtk_spin_button_new_with_range (0, 100, 1);
>   gtk_box_pack_start (GTK_BOX (details), widget, FALSE, FALSE, 0);
> 
>   widget = gtk_radio_button_new_with_label (NULL, "RadioButton 1");
>   gtk_box_pack_start (GTK_BOX (details), widget, FALSE, FALSE, 0);
> 
>   widget = gtk_radio_button_new_with_label_from_widget (
>                                                      GTK_RADIO_BUTTON
> (widget),
>                                                         "RadioButton 2");
>   gtk_box_pack_start (GTK_BOX (details), widget, FALSE, FALSE, 0);
> 
>   widget = gtk_radio_button_new_with_label (NULL, "RadioButton 3");
>   gtk_widget_set_state (widget, GTK_STATE_INSENSITIVE);
>   gtk_box_pack_start (GTK_BOX (details), widget, FALSE, FALSE, 0);
> 
>   gtk_notebook_append_page (GTK_NOTEBOOK (notebook), details,
>                             gtk_image_new_from_stock (GTK_STOCK_EDIT,
>                                                      
> GTK_ICON_SIZE_LARGE_TOOLBAR));
>   gtk_container_child_set (GTK_CONTAINER (notebook), details, "tab-expand",
>                            TRUE, NULL);
> 
> 
>   /* let's go! */
>   gtk_widget_show_all (window);
>   gtk_main ();
> 
>   g_free (data);
>   return 0;
> }
> 
> /* signal callbacks */
> 
> static void
> search_toggle_cb (GtkWidget * button, ApplicationData * data)
> {
> /*  gboolean search;
> 
>   search = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
> 
>   if (search)
>     {
>       gtk_widget_show (data->search_entry);
>       gtk_widget_hide (data->filter_combo);
>     }
>   else
>     {
>       gtk_widget_show (data->filter_combo);
>       gtk_widget_hide (data->search_entry);
>     }*/
>   g_object_set (G_OBJECT (data->search_entry), "visible",
>     !GTK_WIDGET_VISIBLE (data->search_entry), NULL);
>   g_object_set (G_OBJECT (data->filter_combo), "visible",
>     !GTK_WIDGET_VISIBLE (data->filter_combo), NULL);
> }
> 
> 
> Up next .. moving the MokoMakefile over to the neo1973 and letting it
> run on an NFS drive for a few .. I dunno .. weeks! *:)
> 
> 
> ;
> -- 
> Jay Vaughan
> 
> 
> 
> 
> 


-- 
tarent Gesellschaft für Softwareentwicklung und IT-Beratung mbH

Heilsbachstr. 24, 53123 Bonn    | Poststr. 4-5, 10178 Berlin
fon: +49(228) / 52675-0         | fon: +49(30) / 27594853
fax: +49(228) / 52675-25        | fax: +49(30) / 78709617
durchwahl: +49(228) / 52675-17  | mobil: +49(171) / 7673249

Geschäftsführer:
Boris Esser, Elmar Geese, Thomas Müller-Ackermann
HRB AG Bonn 5168
Ust-ID: DE122264941

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 252 bytes
Desc: OpenPGP digital signature
Url : http://lists.openmoko.org/pipermail/openmoko-devel/attachments/20071205/d0c73d5e/signature.pgp


More information about the openmoko-devel mailing list