/* An ebits version of the desktop switcher. Written by James Carscadden and Brian Mattern Use bits named Changer_# where # is 0 - 7 for the buttons. The disabled state is used for the current desktop. */ uses Console, String; /* define observer function */ function changerObserver(object data, number desk) { number i, n; /* get the desktop number as an int. n is passed as a float (0.000000, 1.00000000, ...) and i just want (0, 1, ...) */ n = String.toLong(String.copySection("" + desk, 0, 1)); Console.println("in changerObserver: " + desk + ", " + n); for (i = 0; i < 8; i++) data.setState("Changer_" + i, "normal"); data.setState("Changer_" + n, "disabled"); } /* define callback function */ function changer_button_cb(object ev, string c, number b, number x, number y, number ox, number oy, number ow, number oh) { number n, i; Console.println("in changer_button_cb: " + c); /* the '+ " "' is included to make it work with broken ferite .99.4 String.copySection() func */ n = String.toLong(String.copySection(c + " ", 8, 9)); e.flip_to_desktop(n); } /* ---------------------main func-------------------------- */ /* declare vars */ object epp; object ebits; number i; /* create a new epplet, required */ epp = new Epplet(); /* add an ebits object to the epplet */ ebits = new Ebits("changer.bits.db", epp); /* move the epplet to the top right corner */ epp.move(epp.getViewW() - 100, 0); /* set the ebits object as the main epplet bits */ epp.setBits(ebits); /* display the epplet. this resizes / moves the main epplet bits to the geometry of the epplet */ epp.display(); /* set up callbacks for when button is pressed */ ebits.setCallback("Changer_0", "changer_button_cb", ebits); ebits.setCallback("Changer_1", "changer_button_cb", ebits); ebits.setCallback("Changer_2", "changer_button_cb", ebits); ebits.setCallback("Changer_3", "changer_button_cb", ebits); ebits.setCallback("Changer_4", "changer_button_cb", ebits); ebits.setCallback("Changer_5", "changer_button_cb", ebits); ebits.setCallback("Changer_6", "changer_button_cb", ebits); ebits.setCallback("Changer_7", "changer_button_cb", ebits); /* e starts on desktop 0, so set it disabled */ ebits.setState("Changer_0", "disabled"); /* add observer, when the desktop is switched, the function "deskSwitchObserver is called, and ebits is passed along with it (although it isn't used);*/ epp.addDesktopObserver("changerObserver", ebits);