diff options
Diffstat (limited to 'src/gui/gui.gtkaml')
-rw-r--r-- | src/gui/gui.gtkaml | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/src/gui/gui.gtkaml b/src/gui/gui.gtkaml new file mode 100644 index 0000000..8094da2 --- /dev/null +++ b/src/gui/gui.gtkaml @@ -0,0 +1,269 @@ +<!-- + + Frontend for the 0xFFFF flasher in gtkaml + + author: pancake <youterm.com> + +--> + +<Window xmlns='Gtk' xmlns:SQueues='SQueues' xmlns:GLib='GLib' xmlns:class="http://gtkaml.org/0.2" + class:name="MainWindow" title="0xFFFF GUI" delete-event="{OnWindow1DeleteEvent}"> +<VBox> + <MenuBar expand="false"> + <MenuItem label="_File" with-mnemonic="true"> + <submenu> + <Menu> + <ImageMenuItem stock-id="gtk-new" activate="{OnFileNewEvent}"/> + <ImageMenuItem stock-id="gtk-open" activate="{OnFileOpenEvent}"/> + <SeparatorMenuItem /> + <ImageMenuItem stock-id="gtk-quit" activate="{OnQuitEvent}"/> + </Menu> + </submenu> + </MenuItem> + + <!-- Help menu --> + <MenuItem label="_Help" with-mnemonic="true"> + <submenu> + <Menu> + <ImageMenuItem stock-id="gtk-about" activate="{OnMenuHelpAboutActivatedEvent}"/> + </Menu> + </submenu> + </MenuItem> + </MenuBar> + + <HBox border-width="5"> + <VBox border-width="3" spacing="3"> + <ScrolledWindow can-focus="true" hscrollbar-policy="{PolicyType.AUTOMATIC}" vscrollbar-policy="{PolicyType.AUTOMATIC}"> + <TreeView class:private="tv"> + </TreeView> + </ScrolledWindow> + + <ProgressBar class:private="pb" expand="false" /> + </VBox> + <VBox expand="false" border-width="3" spacing="3"> + <Button label="gtk-add" use-stock="true" expand="false" clicked="{OnFileOpenEvent}" /> + <Button label="gtk-remove" use-stock="true" expand="false" clicked="{list_del}"/> + <Label label="" /> + <Button label="gtk-info" use-stock="true" expand="false" clicked="{OnGetInformation}"/> + <Button label="Options" use-stock="false" expand="false"/> + <Button label="Fiasco!" use-stock="false" expand="false"/> + <Button label="Unpack!" use-stock="false" expand="false"/> + <Button label="Go flash!" use-stock="false" expand="false"/> + </VBox> + </HBox> + + <Statusbar expand="false"/> +</VBox> + + <AboutDialog class:standalone="true" class:private="aboutdialog1" delete-event="{aboutdialog1.hide_on_delete}" + border-width="5" title="About 0xFFFF gui" resizable="false" modal="true" + window-position="{WindowPosition.CENTER_ON_PARENT}" has-separator="false" + program-name="0xFFFF" version="0.4" copyright="Copyright (c) 2008 pancake" + comments="The Free Nokia Internet Tablet flasher" + website="http://www.nopcode.org/0xFFFF/" + authors='{new string[] {"pancake (pancake@youterm.com)", null}}'> + </AboutDialog> + +<![CDATA[ +private void OnWindow1DeleteEvent () +{ + doCloseApplication (); +} + +private void doCloseApplication () +{ + Gtk.main_quit (); +} + +private void OnFileOpenEvent () +{ + FileChooserDialog fc = new FileChooserDialog("Select file to open", + this, + FileChooserAction.OPEN, + "gtk-cancel",ResponseType.CANCEL, + "gtk-open",ResponseType.ACCEPT); + + int resp = fc.run (); + fc.hide (); + if (resp == ResponseType.ACCEPT) + { + add_file(fc.get_filename ()); + } + fc.destroy (); +} + +public bool loadFile( string filename ) +{ + int err = 0; + try + { + string contents; int length; + FileUtils.get_contents (filename, out contents, out length); + //textview1.buffer.set_text (contents, length); + } + catch(Error e) + { + showError ("Unexpected error while loading the file, please contact the author with the following information:\n\n" + e.message); + err++; + } + return err == 0; +} + +public void showMessage(string s, MessageType mt) +{ + MessageDialog md = new MessageDialog (this, + DialogFlags.DESTROY_WITH_PARENT, + mt, ButtonsType.CLOSE, s); + md.run (); + md.destroy (); +} + +private void OnMenuHelpAboutActivatedEvent () +{ + aboutdialog1.transient_for = this; + aboutdialog1.run (); +} + +public void showError (string s) +{ + MessageDialog md = new MessageDialog (this, + DialogFlags.DESTROY_WITH_PARENT, + MessageType.ERROR, + ButtonsType.CLOSE, + s); + md.run (); + md.destroy (); +} + +private void OnFileNewEvent () +{ + list_clear(); + // TODO: clear file list +} + +private void OnQuitEvent () +{ + doCloseApplication(); +} + + +public void list_clear() +{ + ((ListStore)tv.model).clear(); +} + +public void list_del() +{ + TreeIter iter; + TreeModel model; + string str = ""; + + TreeSelection sel = tv.get_selection(); + + if (sel.count_selected_rows() == 1) { + sel.get_selected(out model, out iter); + ((ListStore)tv.model).remove(iter); + } + + //return str; +} + +public void add_file(string file) +{ + ListStore listmodel = (ListStore)tv.get_model(); + Gtk.TreeIter iter; + listmodel.append (out iter); + listmodel.set (iter, 0, "initfs", 1, "3M", 2, file, -1); +} + +public static void setup_treeview (Gtk.TreeView view) { + + /* use liststore to hold accountname, accounttype, balance and color attribute */ + /* for more info how gtkTreeview works take a look in the GTK API */ + + var listmodel = new Gtk.ListStore(4, typeof(string), typeof(string), typeof(string), typeof(string)); + view.set_model(listmodel); + + view.insert_column_with_attributes (-1, "Type", new Gtk.CellRendererText(), "text", 0, null); + view.insert_column_with_attributes (-1, "Size", new Gtk.CellRendererText(), "text", 1, null); + + var cell = new Gtk.CellRendererText (); + cell.set ("foreground_set", true, null); + view.insert_column_with_attributes (-1, "Name", cell, "text", 2, "foreground", 3, null); + + Gtk.TreeIter iter; + listmodel.append (out iter); + listmodel.set (iter, 0, "initfs", 1, "3M", 2, "initfs.jffs", -1); + //listmodel.set (iter, 0, "initfs", 1, "3M", 2, "initfs.jffs", 3, "green", -1); + + listmodel.append (out iter); + listmodel.set (iter, 0, "rootfs", 1, "52M", 2, "rootfs.jffs", -1); + } + +public static bool readFunc() +{ + weak string msg = p->get(0); + //string str = "%s".printf(msg); + if (msg != null && msg[0]!='\0') { + stdout.printf("chk msg found hwhe (%s)\n", msg); + viewer.showMessage(msg, MessageType.INFO); + p->pop(); + } + return true; +} + +static SQueue *q = null; +static SQueue *p = null; + +private void OnGetInformation() +{ +stdout.printf("chking\n"); + msg("foo"); +} + +private bool chk_queues() +{ + if (p == null) + p = SQueue.open("/tmp/0xFFFF.1", SQueueMode.OPEN); + if (q == null) + q = SQueue.open("/tmp/0xFFFF.2", SQueueMode.OPEN); + if (p == null || q == null) { + showMessage("Cannot connect to queues", MessageType.ERROR); + return false; + } + return true; +} + +public void msg(string str) +{ + if (!chk_queues()) + return; + if (q->push(str, 0)<1) { + stderr.printf("Oops on push\n"); + q->free(); + q = null; + p->free(); + p = null; + } +} + +static MainWindow viewer; + +static int main (string[] args) +{ + Gtk.init (ref args); + viewer = new MainWindow(); + if (args.length > 1) + viewer.loadFile (args[1]); + viewer.resize(600,400); + viewer.set_position(WindowPosition.CENTER); + setup_treeview(viewer.tv); + viewer.show_all (); + viewer.showMessage("This software is beta and does not guaranties correct functionality", MessageType.WARNING); + Timeout.add(600, (SourceFunc)(readFunc)); + Gtk.main (); + return 0; +} + +]]> +</Window> |