Okay, today for a bit of early morning fun I set up a dev environment on my neo1973:

[EMAIL PROTECTED]:/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!

[EMAIL PROTECTED]:/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:

[EMAIL PROTECTED]:/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

[EMAIL PROTECTED]:/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)

[EMAIL PROTECTED]:/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





_______________________________________________
OpenMoko community mailing list
community@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/community

Reply via email to