The cairo-appbase package

[Tags: bsd3, program]

This template includes working callbacks to handle the File and Help menus and File Save/Open dialogs, with dummy handlers for selecting filenames and the Edit menu's Cut, Copy, and Paste. The main canvas uses Cairo for graphics rendering, and includes example code from the cairo package.

To build your own application on top of this, first grab the code. You can either grab it from hackage with cabal unpack cairo-appbase, or clone the git repo:

   git clone git://github.com/kfish/cairo-appbase.git

To add widgets, install glade from your distro system and run glade data/main.ui. Save the resulting file in GtkBuilder format.

Note that you must run cabal install to put the UI file in the correct place for your application to pick it up. To modify the code, edit src/cairo-appbase.hs. Hooking up functions to widgets is very simple: get a widget by name (which you set in ui file), and hook one of its signals (which you found in the Signals tab in glade) to an IO () action:

 cut1 <- get G.castToMenuItem "cut1"
 G.onActivateLeaf cut1 $ myCut

The template code includes a trivial definition of myCut:

 myCut :: IO ()
 myCut = putStrLn "Cut"

A real application will want to pass data to the callback. In C, this is fairly tedious as you only have a single void * to pass to callbacks as user_data, and applications typically do lots of marshalling and unmarshalling to pass data around. In Haskell however, you can make yourself a more complex callback handler and use a curried version of it in each instance:

 cut1 <- get G.castToMenuItem "cut1"
 G.onActivateLeaf cut1 $ myComplexCut project phase 7

 ...

 myCut :: Project -> MoonPhase -> LuckyNumber -> IO ()
 myCut project phase num = do
     let selection = currentSelection project
     when (phase == Full) howl
     when (num /= 7) fail
     doActualCut selection

Properties

Versions0.2, 0.3, 0.4
Dependenciesbase (<3), cairo, glib, gtk or
base (>=3 && <6), cairo, glib, gtk
LicenseBSD3
AuthorConrad Parker, Johan Bockgård
Maintainerconrad@metadecks.org
CategoryDevelopment
Source repositoryhead: git clone git://github.com/kfish/cairo-appbase.git
Executablescairo-appbase
Upload dateMon Nov 14 06:55:33 UTC 2011
Uploaded byConradParker
Downloads226 total (26 in last 30 days)

Flags

NameDescriptionDefault
splitbaseUse the split-up base package.Enabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainers' corner

For package maintainers and hackage trustees