From: Bernhard L. <b.l...@gm...> - 2009-06-28 17:33:10
|
Hello list, thanks to your help I could finish my application. It works well on Ubuntu Linux where it was written. I then transfered it to Windows, where it compiles with no problem, starts with no problem, does some things without any problem but does crash when performing it's main task. The error message is: main: user error (Pattern match failure in do expression at gtk\Graphics \UI\Gtk\MenuComboToolbar\ComboBox.chs.pp:244:2-13 when run in ghci the error message is identical, followed by: <interactive>: interrupted <interactive>: warning: too many hs_exit()s On Windows I'm using GHC 6.10.3 and gtk 0.10.1 (as downloaded today) On Linux I'm using GHC 6.8.2 and gtk 0.9.13 (both from ubuntu repositories) Any help appreciated, Cheers, Bernhard |
From: Axel S. <Axe...@en...> - 2009-06-28 20:05:55
|
On Jun 28, 2009, at 19:33, Bernhard Lehnert wrote: > Hello list, > > thanks to your help I could finish my application. It works well on > Ubuntu Linux where it was written. > I then transfered it to Windows, where it compiles with no problem, > starts with no problem, does some things without any problem but > does crash when performing it's main task. > > The error message is: > main: user error (Pattern match failure in do expression at gtk > \Graphics\UI\Gtk\MenuComboToolbar\ComboBox.chs.pp:244:2-13 The offending function looks like this: -- | Retrieve the model that was created with 'comboBoxSetModelText'. -- comboBoxGetModelText :: ComboBoxClass self => self -> IO (ListStore String) comboBoxGetModelText self = do (Just store) <- objectGetAttributeUnsafe comboQuark (toComboBox self) return store So what it does is that our Haskell binding adds a new attribute to each ComboBox widget called comboQuark in which we store a pointer to the Haskell ListStore. This attribute is set when you create a combo box using comboBoxSetModelText. This attribute won't be there if you create the combo box in any other way, in particular, if you create it using Glade. I have no idea why this attribute is not there when Gtk2Hs runs under Windows (and I have no Windows machine to test it) but under Linux. As a workaround for now, I propose that you create a (ListStore String) explicitly and set it using 'comboBoxSetModel'. Sorry I can't resolve this. If you are sure this has to do with Windows, please file a bug on Trac. Thanks, Axel. > when run in ghci the error message is identical, followed by: > <interactive>: interrupted > <interactive>: warning: too many hs_exit()s > > On Windows I'm using GHC 6.10.3 and gtk 0.10.1 (as downloaded today) > On Linux I'm using GHC 6.8.2 and gtk 0.9.13 (both from ubuntu > repositories) > > Any help appreciated, > Cheers, > Bernhard > ---------------------------------------------------------------------- > -------- > _______________________________________________ > Gtk2hs-users mailing list > Gtk...@li... > https://lists.sourceforge.net/lists/listinfo/gtk2hs-users |
From: Bernhard L. <b.l...@gm...> - 2009-06-28 20:41:00
|
Thanks for helping. > This attribute is set when you create a combo > box using comboBoxSetModelText. This attribute won't be there if you > create the combo box in any other way, in particular, if you create > it using Glade. I forgot to mention: The entire GUI is created using Glade 3.6.3 on Linux. All items in the comboBox are entered in Glade. > As a workaround for now, I propose that you create a > (ListStore String) explicitly and set it using 'comboBoxSetModel'. I will try to do that tomorrow if I can and will report. > If you are sure this has to do with > Windows, please file a bug on Trac. Being a total beginner I can't really be sure it's windows. However, there is no error and no warning when compiling the identical code on Linux. So before filing any bugs I'll first wait for further discussion. Thanks so far, Bernhard |
From: Axel S. <Axe...@en...> - 2009-06-28 21:25:59
|
On Jun 28, 2009, at 22:40, Bernhard Lehnert wrote: > Thanks for helping. > >> This attribute is set when you create a combo >> box using comboBoxSetModelText. This attribute won't be there if you >> create the combo box in any other way, in particular, if you create >> it using Glade. > > I forgot to mention: The entire GUI is created using Glade 3.6.3 on > Linux. All items in the comboBox are entered in Glade. Ah. This won't work. Gtk2Hs uses it's own stores (i.e. ListStore and TreeStore) since they are much easier to handle than C stores. Glade doesn't know about these. Hence the error. Don't enter any values. In fact, if that's possible in Glade, set the model of the ComboBox to NULL. Then in Haskell land, create a new list store, add your strings into it and set it as the store of the combo box. store <- listStoreNew ["foo", "bar", "baz"] comboBoxSetModel combo (Just store) Hope this helps, Axel. |
From: Bernhard L. <b.l...@gm...> - 2009-06-29 18:08:23
|
Hi Axel, hi everybody, sorry, my problem does go on... Am Sonntag, den 28.06.2009, 23:25 +0200 schrieb Axel Simon: > Don't enter any values. In fact, if that's possible in Glade, set the > model of the ComboBox to NULL. Glade allows two project data formats: "GtkBuilder" and "libglade". I did not understand the difference, but "Libglade" allows for entering items, "GtkBuilder" does not. So according to what's written above I should probably choose "GtkBuilder" and build my own listStore? > Then in Haskell land, create a new list store, add your strings into > it and set it as the store of the combo box. > > store <- listStoreNew ["foo", "bar", "baz"] > comboBoxSetModel combo (Just store) This code doesn't compile. To be able to talk about real code I wrote the following small example: module Main where import Graphics.UI.Gtk import Graphics.UI.Gtk.Glade main = do initGUI Just xml <- xmlNew "test.glade" window <- xmlGetWidget xml castToWindow "window1" button <- xmlGetWidget xml castToButton "button1" combo <- xmlGetWidget xml castToComboBox "combobox1" store <- listStoreNew ["foo", "bar", "baz"] comboBoxSetModel combo (Just store) onClicked button $ do input <- comboBoxGetActiveText combo print input onDestroy window mainQuit widgetShowAll window mainGUI trying to start ghci with it it says: test.hs:12:27: Couldn't match expected type `TMType' against inferred type `[Char]' In the expression: "foo" In the first argument of `listStoreNew', namely `["foo", "bar", "baz"]' In a 'do' expression: store <- listStoreNew ["foo", "bar", "baz"] Failed, modules loaded: none. I don't understand the API enough to build the "TMType" and still my application is up and running on Linux but not on Windows. Cheers, Bernhard |
From: Axel S. <Axe...@en...> - 2009-06-29 18:20:07
|
Hi Bernhard, I think the GtkBuilder stuff is the modern version. But I don't know what our libglade module supports (I don't know much about Glade). On Jun 29, 2009, at 20:08, Bernhard Lehnert wrote: > > trying to start ghci with it it says: > test.hs:12:27: > Couldn't match expected type `TMType' > against inferred type `[Char]' > In the expression: "foo" > In the first argument of `listStoreNew', namely > `["foo", "bar", "baz"]' > In a 'do' expression: store <- listStoreNew ["foo", "bar", "baz"] > Failed, modules loaded: none. > > I don't understand the API enough to build the "TMType" and still > my application is up and running on Linux but not on Windows. Which version did you say you're using? We've deprecated everything under Graphics.UI.Gtk.TreeList. Your code picked up "listStoreNew" from these old modules. Try to explicitly import the current modules using 'import qualified Graphics.UI.Gtk.ModelView as MV' and then prefix the listStore (and the comboBox functions) with MV. . Even better: install the latest Gtk2Hs for Windows since some of the new functions are not available in the earlier Gtk2Hs releases. Axel. |
From: Bernhard L. <b.l...@gm...> - 2009-06-30 18:59:14
|
Am Montag, den 29.06.2009, 23:18 +0200 schrieb Axel Simon: > Could you try using 'comboBoxSetModelText'? Easily, but not understand the type problem that arises from it: line 12: store <- listStoreNew ["foo", "bar", "baz"] line 13: comboBoxModelText combo (Just store) => test.hs:13:4 Couldn't match expected type 'Maybe (ListStore [Char]) -> t' against inferred type 'IO (ListStore String)' Thanks for your ongoing effort and patience! Bernhard |
From: Axel S. <Axe...@en...> - 2009-07-01 07:51:28
|
On Tue, 2009-06-30 at 20:59 +0200, Bernhard Lehnert wrote: > Am Montag, den 29.06.2009, 23:18 +0200 schrieb Axel Simon: > > Could you try using 'comboBoxSetModelText'? > > Easily, but not understand the type problem that arises from it: > > line 12: store <- listStoreNew ["foo", "bar", "baz"] > line 13: comboBoxModelText combo (Just store) > > > => test.hs:13:4 > Couldn't match expected type 'Maybe (ListStore [Char]) -> t' > against inferred type 'IO (ListStore String)' Ok, here you're using a different function (an attribute, use with 'set'). What I suggested to do was to use the "Simple Text API" which gives you combo boxes that only contain strings. To create one of these, you create a combo box and then you set a default model using 'comboBoxSetModelText'. The name of the latter is a bit confusing, I admit, since it creates a ListStore, hooks it up with the ComboBox. However, looking at the API again, the point is that you from then onwards only use the functions in ComboBox, namely the "Simple Text API". So: combo <- comboBoxNew comboBoxSetModelText combo mapM_ (comboBoxAppendText combo) ["foo", "bar", "baz"] Sorry about the confusion, I think it wasn't all clear in my head either. Cheers, Axel. |
From: Bernhard L. <b.l...@gm...> - 2009-07-03 14:16:58
|
Thank you Alex, the code in your last mail on this (cited below) works great. It works as well on comboBoxes constructed with Glade. So my problem is solved. Thanks alot. Cheers, Bernhard Am Mittwoch, den 01.07.2009, 09:51 +0200 schrieb Axel Simon: > combo <- comboBoxNew > comboBoxSetModelText combo > mapM_ (comboBoxAppendText combo) ["foo", "bar", "baz"] |