dbb33756bd786e9432e18ec7be93f8c416e1b492Jon A. Cruz/**
dbb33756bd786e9432e18ec7be93f8c416e1b492Jon A. Cruz * @file
dbb33756bd786e9432e18ec7be93f8c416e1b492Jon A. Cruz * Input devices dialog (new) - implementation.
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould */
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould/* Author:
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould * Jon A. Cruz
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould *
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould * Copyright (C) 2008 Author
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould * Released under GNU GPL. Read the file 'COPYING' for more information.
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <map>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <set>
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz#include <list>
1b3a8414f17dc95fc921d999ea715c99d10dd4aaAlex Valavanis#include "ui/widget/panel.h"
b113f74cd28fecc5bfaa6bc97346a9a62c258e7fJohn Smith#include "ui/widget/frame.h"
b113f74cd28fecc5bfaa6bc97346a9a62c258e7fJohn Smith
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <glib/gprintf.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <glibmm/i18n.h>
a34103bb11674e2d8489be2022aea65ea639c6b9Alex Valavanis
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz#include <gtkmm/alignment.h>
a34103bb11674e2d8489be2022aea65ea639c6b9Alex Valavanis#include <gtkmm/buttonbox.h>
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz#include <gtkmm/cellrenderercombo.h>
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz#include <gtkmm/checkbutton.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/comboboxtext.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/enums.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/eventbox.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/frame.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/image.h>
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz#include <gtkmm/liststore.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/menubar.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/notebook.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/paned.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/progressbar.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/scrolledwindow.h>
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis# include <gtkmm/grid.h>
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis# include <gtkmm/table.h>
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/treemodel.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/treemodelcolumn.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/treestore.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include <gtkmm/treeview.h>
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include "device-manager.h"
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz#include "preferences.h"
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould
e9b6af083e34e2397a8ddbe9781920733d09d151Ted Gould#include "input.h"
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const * core_xpm[] = {
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz"16 16 4 1",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen" c None",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen". c #808080",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen"+ c #000000",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen"@ c #FFFFFF",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" .++++++. ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" +@+@@+@+ ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" +@+@@+@+ ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" +.+..+.+ ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" +@@@@@@+ ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" +@@@@@@+ ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" +@@@@@@+ ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" +@@@@@@+ ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" +@@@@@@+ ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" .++++++. ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" ",
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz" "};
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const *eraser[] = {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* columns rows colors chars-per-pixel */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"16 16 5 1",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz" c black",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz". c green",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X c #808080",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"o c gray100",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O c None",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* pixels */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOO OO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOO . O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOO . OO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOO . OOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOO . OOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOO . OOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOXo OOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOXoXOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOXoXOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOXoXOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOXoXOOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOXoXOOOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOXXOOOOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOOOOO"
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz};
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const *mouse[] = {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* columns rows colors chars-per-pixel */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"16 16 3 1",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz" c black",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz". c gray100",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X c None",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* pixels */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXX XXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXX . XXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXX .... XXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXX .... XXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXX .... XXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXX .... XXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXX .... XXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXX .... XXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXX . XXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXX XXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX"
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz};
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const *pen[] = {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* columns rows colors chars-per-pixel */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"16 16 3 1",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz" c black",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz". c gray100",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X c None",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* pixels */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXX XX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXX . X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXX . XX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXX . XXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXX . XXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXX . XXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXX . XXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXX . XXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXX . XXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXX . XXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXX . XXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XX . XXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XX XXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX"
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz};
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const *sidebuttons[] = {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* columns rows colors chars-per-pixel */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"16 16 4 1",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz" c black",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz". c #808080",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"o c green",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O c None",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* pixels */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O..............O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O.OOOOOOOOOOOO.O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O OOOOOOOO O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O o OOOOOOOO o O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O o OOOOOOOO o O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O OOOOOOOO O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O.OOOOOOOOOOOO.O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O.OOOOOOOOOOOO.O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O.OOOOOOOOOOOO.O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O.OOOOOOOOOOOO.O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O.OOOOOOOOOOOO.O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O..............O",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOOOOO"
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz};
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const *tablet[] = {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* columns rows colors chars-per-pixel */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"16 16 3 1",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz" c black",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz". c gray100",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X c None",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* pixels */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X ............ X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X ............ X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X ............ X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X ............ X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X ............ X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X ............ X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X ............ X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X ............ X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X ............ X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X ............ X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X X",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"XXXXXXXXXXXXXXXX"
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz};
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const *tip[] = {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* columns rows colors chars-per-pixel */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"16 16 5 1",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz" c black",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz". c green",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"X c #808080",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"o c gray100",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"O c None",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/* pixels */
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOOXOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOOXoXO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOOXoXOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOOXoXOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOOXoXOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOOOXoXOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOOO oXOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOOO . OOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOOO . OOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOOO . OOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OOO . OOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OO . OOOOOOOOOOO",
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz"OO OOOOOOOOOOOO",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"OOOOXXXXXOOOOOOO",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"OOOOOOOOOXXXXXOO"
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz};
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const *button_none[] = {
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz/* columns rows colors chars-per-pixel */
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"8 8 3 1",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz" c black",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz". c #808080",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"X c None",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz/* pixels */
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"XXXXXXXX",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"XX .. XX",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"X .XX. X",
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz"X.XX X.X",
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz"X.X XX.X",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"X .XX. X",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"XX .. XX",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"XXXXXXXX"
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz};
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const *button_off[] = {
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz/* columns rows colors chars-per-pixel */
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"8 8 4 1",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz" c black",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz". c #808080",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"X c gray100",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"o c None",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz/* pixels */
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"oooooooo",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"oo. .oo",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"o. XX .o",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"o XXXX o",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"o XXXX o",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"o. XX .o",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"oo. .oo",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"oooooooo"
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz};
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const *button_on[] = {
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz/* columns rows colors chars-per-pixel */
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"8 8 3 1",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz" c black",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz". c green",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"X c None",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz/* pixels */
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"XXXXXXXX",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"XX XX",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"X .. X",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"X .... X",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"X .... X",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"X .. X",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"XX XX",
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz"XXXXXXXX"
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz};
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const * axis_none_xpm[] = {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz"24 8 3 1",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen" c None",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen". c #000000",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen"+ c #808080",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .++++++++++++++++++. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .+ . .+. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" + . . . + ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" + . . . + ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .+. . +. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .++++++++++++++++++. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" "};
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const * axis_off_xpm[] = {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz"24 8 4 1",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen" c None",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen". c #808080",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen"+ c #000000",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen"@ c #FFFFFF",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .++++++++++++++++++. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .+@@@@@@@@@@@@@@@@@@+. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" +@@@@@@@@@@@@@@@@@@@@+ ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" +@@@@@@@@@@@@@@@@@@@@+ ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .+@@@@@@@@@@@@@@@@@@+. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .++++++++++++++++++. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" "};
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz/* XPM */
6c08c8c541e1537958c0ef1bdbab931af692b7f5joncruzstatic char const * axis_on_xpm[] = {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz"24 8 3 1",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen" c None",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen". c #000000",
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen"+ c #00FF00",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .................... ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" ..++++++++++++++++++.. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .++++++++++++++++++++. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .++++++++++++++++++++. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" ..++++++++++++++++++.. ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" .................... ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz" "};
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruzusing Inkscape::InputDevice;
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruznamespace Inkscape {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruznamespace UI {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruznamespace Dialog {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruzclass DeviceModelColumns : public Gtk::TreeModel::ColumnRecord
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz{
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruzpublic:
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Gtk::TreeModelColumn<bool> toggler;
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Gtk::TreeModelColumn<Glib::ustring> expander;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::TreeModelColumn<Glib::ustring> description;
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > thumbnail;
f11c59cb3f794a30504cb373fc8239433fd7c20fJon A. Cruz Gtk::TreeModelColumn<Glib::RefPtr<InputDevice const> > device;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::TreeModelColumn<Gdk::InputMode> mode;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz DeviceModelColumns() { add(toggler), add(expander), add(description); add(thumbnail); add(device); add(mode); }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz};
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruzstatic std::map<Gdk::InputMode, Glib::ustring> &getModeToString()
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static std::map<Gdk::InputMode, Glib::ustring> mapping;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (mapping.empty()) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mapping[Gdk::MODE_DISABLED] = _("Disabled");
1f0831722081d039ce5a066667057cd20feabb26JazzyNico mapping[Gdk::MODE_SCREEN] = C_("Input device", "Screen");
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mapping[Gdk::MODE_WINDOW] = _("Window");
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz return mapping;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smithstatic int getModeId(Gdk::InputMode im)
71ecd9191e4085c399050509d0badaccdffa45d7John Smith{
71ecd9191e4085c399050509d0badaccdffa45d7John Smith if (im == Gdk::MODE_DISABLED) return 0;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith if (im == Gdk::MODE_SCREEN) return 1;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith if (im == Gdk::MODE_WINDOW) return 2;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith return 0;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith}
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruzstatic std::map<Glib::ustring, Gdk::InputMode> &getStringToMode()
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static std::map<Glib::ustring, Gdk::InputMode> mapping;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (mapping.empty()) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mapping[_("Disabled")] = Gdk::MODE_DISABLED;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mapping[_("Screen")] = Gdk::MODE_SCREEN;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mapping[_("Window")] = Gdk::MODE_WINDOW;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz return mapping;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruzclass InputDialogImpl : public InputDialog {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruzpublic:
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz InputDialogImpl();
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz virtual ~InputDialogImpl() {}
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruzprivate:
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz class ConfPanel : public Gtk::VBox
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz public:
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz ConfPanel();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz ~ConfPanel();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz class Blink : public Preferences::Observer
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz public:
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Blink(ConfPanel &parent);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz virtual ~Blink();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz virtual void notify(Preferences::Entry const &new_val);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz ConfPanel &parent;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz };
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static void commitCellModeChange(Glib::ustring const &path, Glib::ustring const &newText, Glib::RefPtr<Gtk::TreeStore> store);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static void setModeCellString(Gtk::CellRenderer *rndr, Gtk::TreeIter const &iter);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz static void commitCellStateChange(Glib::ustring const &path, Glib::RefPtr<Gtk::TreeStore> store);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz static void setCellStateToggle(Gtk::CellRenderer *rndr, Gtk::TreeIter const &iter);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz void saveSettings();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith void onTreeSelect();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz void useExtToggled();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith void onModeChange();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith void setKeys(gint count);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith void setAxis(gint count);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::TreeStore> confDeviceStore;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeIter confDeviceIter;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeView confDeviceTree;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::ScrolledWindow confDeviceScroller;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Blink watcher;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::CheckButton useExt;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::Button save;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#if WITH_GTKMM_3_0
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis Gtk::Paned pane;
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#else
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::HPaned pane;
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#endif
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::VBox detailsBox;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::HBox titleFrame;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::Label titleLabel;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Inkscape::UI::Widget::Frame axisFrame;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Inkscape::UI::Widget::Frame keysFrame;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::VBox axisVBox;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::ComboBoxText modeCombo;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::Label modeLabel;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::HBox modeBox;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith class KeysColumns : public Gtk::TreeModel::ColumnRecord
71ecd9191e4085c399050509d0badaccdffa45d7John Smith {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith public:
71ecd9191e4085c399050509d0badaccdffa45d7John Smith KeysColumns()
71ecd9191e4085c399050509d0badaccdffa45d7John Smith {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith add(name);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith add(value);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith virtual ~KeysColumns() {}
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeModelColumn<Glib::ustring> name;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeModelColumn<Glib::ustring> value;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith };
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith KeysColumns keysColumns;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith KeysColumns axisColumns;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::ListStore> axisStore;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeView axisTree;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::ScrolledWindow axisScroll;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::ListStore> keysStore;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeView keysTree;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::ScrolledWindow keysScroll;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::CellRendererAccel _kb_shortcut_renderer;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz };
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static DeviceModelColumns &getCols();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz enum PixId {PIX_CORE, PIX_PEN, PIX_MOUSE, PIX_TIP, PIX_TABLET, PIX_ERASER, PIX_SIDEBUTTONS,
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz PIX_BUTTONS_NONE, PIX_BUTTONS_ON, PIX_BUTTONS_OFF,
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz PIX_AXIS_NONE, PIX_AXIS_ON, PIX_AXIS_OFF};
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static Glib::RefPtr<Gdk::Pixbuf> getPix(PixId id);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz std::map<Glib::ustring, std::set<guint> > buttonMap;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz std::map<Glib::ustring, std::map<guint, std::pair<guint, gdouble> > > axesMap;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz GdkInputSource lastSourceSeen;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Glib::ustring lastDevnameSeen;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::TreeStore> deviceStore;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeIter deviceIter;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeView deviceTree;
b113f74cd28fecc5bfaa6bc97346a9a62c258e7fJohn Smith Inkscape::UI::Widget::Frame testFrame;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Inkscape::UI::Widget::Frame axisFrame;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::ScrolledWindow treeScroller;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::ScrolledWindow detailScroller;
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#if WITH_GTKMM_3_0
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis Gtk::Paned splitter;
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis Gtk::Paned split2;
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#else
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::HPaned splitter;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::VPaned split2;
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#endif
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::Label devName;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::Label devKeyCount;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::Label devAxesCount;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::ComboBoxText axesCombo;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz Gtk::ProgressBar axesValues[6];
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis Gtk::Grid axisTable;
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::Table axisTable;
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::ComboBoxText buttonCombo;
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz Gtk::ComboBoxText linkCombo;
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz sigc::connection linkConnection;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::Label keyVal;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::Entry keyEntry;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::Notebook topHolder;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::Image testThumb;
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz Gtk::Image testButtons[24];
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz Gtk::Image testAxes[8];
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis Gtk::Grid imageTable;
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz Gtk::Table imageTable;
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::EventBox testDetector;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz ConfPanel cfgPanel;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static void setupTree( Glib::RefPtr<Gtk::TreeStore> store, Gtk::TreeIter &tablet );
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz void setupValueAndCombo( gint reported, gint actual, Gtk::Label& label, Gtk::ComboBoxText& combo );
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz void updateTestButtons( Glib::ustring const& key, gint hotButton );
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz void updateTestAxes( Glib::ustring const& key, GdkDevice* dev );
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis void mapAxesValues( Glib::ustring const& key, gdouble const * axes, GdkDevice* dev);
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz Glib::ustring getKeyFor( GdkDevice* device );
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz bool eventSnoop(GdkEvent* event);
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz void linkComboChanged();
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz void resyncToSelection();
9e681e203a208a1994e83056bbba03f43361c6ffJon A. Cruz void handleDeviceChange(Glib::RefPtr<InputDevice const> device);
9e681e203a208a1994e83056bbba03f43361c6ffJon A. Cruz void updateDeviceAxes(Glib::RefPtr<InputDevice const> device);
9e681e203a208a1994e83056bbba03f43361c6ffJon A. Cruz void updateDeviceButtons(Glib::RefPtr<InputDevice const> device);
9e681e203a208a1994e83056bbba03f43361c6ffJon A. Cruz static void updateDeviceLinks(Glib::RefPtr<InputDevice const> device, Gtk::TreeIter tabletIter, Glib::RefPtr<Gtk::TreeView> tree);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static bool findDevice(const Gtk::TreeModel::iterator& iter,
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::ustring id,
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::TreeModel::iterator* result);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static bool findDeviceByLink(const Gtk::TreeModel::iterator& iter,
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::ustring link,
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::TreeModel::iterator* result);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}; // class InputDialogImpl
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. CruzDeviceModelColumns &InputDialogImpl::getCols()
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static DeviceModelColumns cols;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz return cols;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. CruzGlib::RefPtr<Gdk::Pixbuf> InputDialogImpl::getPix(PixId id)
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static std::map<PixId, Glib::RefPtr<Gdk::Pixbuf> > mappings;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_CORE] = Gdk::Pixbuf::create_from_xpm_data(core_xpm);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_PEN] = Gdk::Pixbuf::create_from_xpm_data(pen);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_MOUSE] = Gdk::Pixbuf::create_from_xpm_data(mouse);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_TIP] = Gdk::Pixbuf::create_from_xpm_data(tip);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_TABLET] = Gdk::Pixbuf::create_from_xpm_data(tablet);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_ERASER] = Gdk::Pixbuf::create_from_xpm_data(eraser);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_SIDEBUTTONS] = Gdk::Pixbuf::create_from_xpm_data(sidebuttons);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_BUTTONS_NONE] = Gdk::Pixbuf::create_from_xpm_data(button_none);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_BUTTONS_ON] = Gdk::Pixbuf::create_from_xpm_data(button_on);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_BUTTONS_OFF] = Gdk::Pixbuf::create_from_xpm_data(button_off);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_AXIS_NONE] = Gdk::Pixbuf::create_from_xpm_data(axis_none_xpm);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_AXIS_ON] = Gdk::Pixbuf::create_from_xpm_data(axis_on_xpm);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz mappings[PIX_AXIS_OFF] = Gdk::Pixbuf::create_from_xpm_data(axis_off_xpm);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<Gdk::Pixbuf> pix;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (mappings.find(id) != mappings.end()) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz pix = mappings[id];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz return pix;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz// Now that we've defined the *Impl class, we can do the method to aquire one.
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruzInputDialog &InputDialog::getInstance()
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz{
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz InputDialog *dialog = new InputDialogImpl();
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz return *dialog;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz}
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruzInputDialogImpl::InputDialogImpl() :
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz InputDialog(),
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz lastSourceSeen((GdkInputSource)-1),
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz lastDevnameSeen(""),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceStore(Gtk::TreeStore::create(getCols())),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceIter(),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceTree(deviceStore),
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testFrame(_("Test Area")),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisFrame(_("Axis")),
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz treeScroller(),
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz detailScroller(),
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz splitter(),
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#if WITH_GTKMM_3_0
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis split2(Gtk::ORIENTATION_VERTICAL),
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable(),
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#else
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz split2(),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable(11, 2),
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz linkCombo(),
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz topHolder(),
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis imageTable(),
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz imageTable(8, 7),
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testDetector(),
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz cfgPanel()
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz{
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::Box *contents = _getContents();
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz treeScroller.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
b113f74cd28fecc5bfaa6bc97346a9a62c258e7fJohn Smith treeScroller.set_shadow_type(Gtk::SHADOW_IN);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith treeScroller.add(deviceTree);
87ea779e2ba0cdee8c0945db55e0504e94fdb0b3JazzyNico treeScroller.set_size_request(50, 0);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith split2.pack1(axisFrame, false, false);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith split2.pack2(testFrame, true, true);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz splitter.pack1(treeScroller);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz splitter.pack2(split2);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz testDetector.add(imageTable);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz testFrame.add(testDetector);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testThumb.set(getPix(PIX_TABLET));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz testThumb.set_padding(24, 24);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis testThumb.set_hexpand();
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis testThumb.set_vexpand();
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis imageTable.attach(testThumb, 0, 0, 8, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz imageTable.attach(testThumb, 0, 8, 0, 1, ::Gtk::EXPAND, ::Gtk::EXPAND);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz {
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz guint col = 0;
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz guint row = 1;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz for ( guint num = 0; num < G_N_ELEMENTS(testButtons); num++ ) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testButtons[num].set(getPix(PIX_BUTTONS_NONE));
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis imageTable.attach(testButtons[num], col, row, 1, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz imageTable.attach(testButtons[num], col, col + 1, row, row + 1, ::Gtk::FILL, ::Gtk::FILL);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz col++;
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz if (col > 7) {
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz col = 0;
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz row++;
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz }
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz col = 0;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz for ( guint num = 0; num < G_N_ELEMENTS(testAxes); num++ ) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testAxes[num].set(getPix(PIX_AXIS_NONE));
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis imageTable.attach(testAxes[num], col * 2, row, 2, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz imageTable.attach(testAxes[num], col * 2, (col + 1) * 2, row, row + 1, ::Gtk::FILL, ::Gtk::FILL);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz col++;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if (col > 3) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz col = 0;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz row++;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz }
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith // This is a hidden preference to enable the "hardware" details in a separate tab
71ecd9191e4085c399050509d0badaccdffa45d7John Smith // By default this is not available to users
71ecd9191e4085c399050509d0badaccdffa45d7John Smith if (Preferences::get()->getBool("/dialogs/inputdevices/test")) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith topHolder.append_page(cfgPanel, _("Configuration"));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith topHolder.append_page(splitter, _("Hardware"));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith topHolder.show_all();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith topHolder.set_current_page(0);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith contents->pack_start(topHolder);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith } else {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith contents->pack_start(cfgPanel);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz int rowNum = 0;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b113f74cd28fecc5bfaa6bc97346a9a62c258e7fJohn Smith/* Gtk::Label* lbl = Gtk::manage(new Gtk::Label(_("Name:")));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::FILL,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(devName, 1, 2, rowNum, rowNum + 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b113f74cd28fecc5bfaa6bc97346a9a62c258e7fJohn Smith rowNum++;*/
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisFrame.add(axisTable);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
b113f74cd28fecc5bfaa6bc97346a9a62c258e7fJohn Smith Gtk::Label *lbl = Gtk::manage(new Gtk::Label(_("Link:")));
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable.attach(*lbl, 0, rowNum, 1, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::FILL,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
42345039880217340bb50cfa9692a75851e0766aAlex Valavanis linkCombo.append(_("None"));
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz linkCombo.set_active_text(_("None"));
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz linkCombo.set_sensitive(false);
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz linkConnection = linkCombo.signal_changed().connect(sigc::mem_fun(*this, &InputDialogImpl::linkComboChanged));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable.attach(linkCombo, 1, rowNum, 1, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(linkCombo, 1, 2, rowNum, rowNum + 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::FILL,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz rowNum++;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz lbl = Gtk::manage(new Gtk::Label(_("Axes count:")));
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable.attach(*lbl, 0, rowNum, 1, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable.attach(devAxesCount, 1, rowNum, 1, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::FILL,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(devAxesCount, 1, 2, rowNum, rowNum + 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz rowNum++;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz/*
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz lbl = Gtk::manage(new Gtk::Label(_("Actual axes count:")));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz devDetails.attach(*lbl, 0, 1, rowNum, rowNum+ 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::FILL,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz devDetails.attach(axesCombo, 1, 2, rowNum, rowNum + 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz rowNum++;
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz*/
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz for ( guint barNum = 0; barNum < static_cast<guint>(G_N_ELEMENTS(axesValues)); barNum++ ) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz lbl = Gtk::manage(new Gtk::Label(_("axis:")));
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis lbl->set_hexpand();
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable.attach(*lbl, 0, rowNum, 1, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axesValues[barNum].set_hexpand();
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable.attach(axesValues[barNum], 1, rowNum, 1, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1,
71ecd9191e4085c399050509d0badaccdffa45d7John Smith ::Gtk::EXPAND,
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz ::Gtk::SHRINK);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(axesValues[barNum], 1, 2, rowNum, rowNum + 1,
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz ::Gtk::EXPAND,
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz ::Gtk::SHRINK);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz axesValues[barNum].set_sensitive(false);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz rowNum++;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz lbl = Gtk::manage(new Gtk::Label(_("Button count:")));
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable.attach(*lbl, 0, rowNum, 1, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable.attach(devKeyCount, 1, rowNum, 1, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::FILL,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(devKeyCount, 1, 2, rowNum, rowNum + 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz rowNum++;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz/*
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz lbl = Gtk::manage(new Gtk::Label(_("Actual button count:")));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz devDetails.attach(*lbl, 0, 1, rowNum, rowNum+ 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::FILL,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz devDetails.attach(buttonCombo, 1, 2, rowNum, rowNum + 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz rowNum++;
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz*/
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable.attach(keyVal, 0, rowNum, 2, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(keyVal, 0, 2, rowNum, rowNum + 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::FILL,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz rowNum++;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz testDetector.signal_event().connect(sigc::mem_fun(*this, &InputDialogImpl::eventSnoop));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz// void gdk_input_set_extension_events (GdkWindow *window,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz// gint mask,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz// GdkExtensionMode mode);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
e0d4fa67a5843ee7cbce4efa52ba2bb09dfdb931Alex Valavanis
e0d4fa67a5843ee7cbce4efa52ba2bb09dfdb931Alex Valavanis // TODO: Extension event stuff has been removed from public API in GTK+ 3
e0d4fa67a5843ee7cbce4efa52ba2bb09dfdb931Alex Valavanis // Need to check that this hasn't broken anything
e0d4fa67a5843ee7cbce4efa52ba2bb09dfdb931Alex Valavanis#if !GTK_CHECK_VERSION(3,0,0)
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz gtk_widget_set_extension_events( GTK_WIDGET(testDetector.gobj()), GDK_EXTENSION_EVENTS_ALL );
e0d4fa67a5843ee7cbce4efa52ba2bb09dfdb931Alex Valavanis#endif
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz testDetector.add_events(Gdk::POINTER_MOTION_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK |Gdk::PROXIMITY_IN_MASK|Gdk::PROXIMITY_OUT_MASK|Gdk::SCROLL_MASK);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#if WITH_GTKMM_3_0
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis axisTable.attach(keyEntry, 0, rowNum, 2, 1);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#else
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.attach(keyEntry, 0, 2, rowNum, rowNum + 1,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::FILL,
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ::Gtk::SHRINK);
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis#endif
b575c4cf8ddc027ca13d2163fcf96e8d2843d015Alex Valavanis
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz rowNum++;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.set_sensitive(false);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith/* detailScroller.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
b113f74cd28fecc5bfaa6bc97346a9a62c258e7fJohn Smith detailScroller.set_shadow_type(Gtk::SHADOW_NONE);
b113f74cd28fecc5bfaa6bc97346a9a62c258e7fJohn Smith detailScroller.set_border_width (0);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith detailScroller.add(devDetails);*/
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz//- 16x16/devices
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz// gnome-dev-mouse-optical
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz// input-mouse
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz// input-tablet
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz// mouse
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz //Add the TreeView's view columns:
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceTree.append_column("I", getCols().thumbnail);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceTree.append_column("Bar", getCols().description);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceTree.set_enable_tree_lines();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceTree.set_headers_visible(false);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceTree.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &InputDialogImpl::resyncToSelection));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith setupTree( deviceStore, deviceIter );
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Inkscape::DeviceManager::getManager().signalDeviceChanged().connect(sigc::mem_fun(*this, &InputDialogImpl::handleDeviceChange));
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Inkscape::DeviceManager::getManager().signalAxesChanged().connect(sigc::mem_fun(*this, &InputDialogImpl::updateDeviceAxes));
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Inkscape::DeviceManager::getManager().signalButtonsChanged().connect(sigc::mem_fun(*this, &InputDialogImpl::updateDeviceButtons));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::TreeView> treePtr(&deviceTree);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Inkscape::DeviceManager::getManager().signalLinkChanged().connect(sigc::bind(sigc::ptr_fun(&InputDialogImpl::updateDeviceLinks), deviceIter, treePtr));
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceTree.expand_all();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz show_all_children();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruzclass TabletTmp {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruzpublic:
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz TabletTmp() {}
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz Glib::ustring name;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz std::list<Glib::RefPtr<InputDevice const> > devices;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz};
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruzstatic Glib::ustring getCommon( std::list<Glib::ustring> const &names )
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz{
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz Glib::ustring result;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if ( !names.empty() ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz size_t pos = 0;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz bool match = true;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz while ( match ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if ( names.begin()->length() > pos ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz gunichar ch = (*names.begin())[pos];
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz for ( std::list<Glib::ustring>::const_iterator it = names.begin(); it != names.end(); ++it ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if ( (pos >= it->length())
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz || ((*it)[pos] != ch) ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz match = false;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz break;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if (match) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz result += ch;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz pos++;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz } else {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz match = false;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz return result;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz}
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smithvoid InputDialogImpl::ConfPanel::onModeChange()
71ecd9191e4085c399050509d0badaccdffa45d7John Smith{
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::ustring newText = modeCombo.get_active_text();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::TreeSelection> sel = confDeviceTree.get_selection();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeModel::iterator iter = sel->get_selected();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith if (iter) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<InputDevice const> dev = (*iter)[getCols().device];
71ecd9191e4085c399050509d0badaccdffa45d7John Smith if (dev && (getStringToMode().find(newText) != getStringToMode().end())) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gdk::InputMode mode = getStringToMode()[newText];
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Inkscape::DeviceManager::getManager().setMode( dev->getId(), mode );
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith}
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruzvoid InputDialogImpl::setupTree( Glib::RefPtr<Gtk::TreeStore> store, Gtk::TreeIter &tablet )
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
f11c59cb3f794a30504cb373fc8239433fd7c20fJon A. Cruz std::list<Glib::RefPtr<InputDevice const> > devList = Inkscape::DeviceManager::getManager().getDevices();
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz if ( !devList.empty() ) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //Gtk::TreeModel::Row row = *(store->append());
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //row[getCols().description] = _("Hardware");
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz // Let's make some tablets!!!
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz std::list<TabletTmp> tablets;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz std::set<Glib::ustring> consumed;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz // Phase 1 - figure out which tablets are present
f11c59cb3f794a30504cb373fc8239433fd7c20fJon A. Cruz for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it = devList.begin(); it != devList.end(); ++it ) {
f11c59cb3f794a30504cb373fc8239433fd7c20fJon A. Cruz Glib::RefPtr<InputDevice const> dev = *it;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz if ( dev ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if ( dev->getSource() != Gdk::SOURCE_MOUSE ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz consumed.insert( dev->getId() );
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if ( tablets.empty() ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz TabletTmp tmp;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz tablets.push_back(tmp);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz tablets.back().devices.push_back(dev);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz } else {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz g_warning("Null device in list");
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz // Phase 2 - build a UI for the present devices
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz for ( std::list<TabletTmp>::iterator it = tablets.begin(); it != tablets.end(); ++it ) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith tablet = store->prepend(/*row.children()*/);
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz Gtk::TreeModel::Row childrow = *tablet;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if ( it->name.empty() ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz // Check to see if we can derive one
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz std::list<Glib::ustring> names;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it2 = it->devices.begin(); it2 != it->devices.end(); ++it2 ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz names.push_back( (*it2)->getName() );
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz Glib::ustring common = getCommon(names);
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if ( !common.empty() ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz it->name = common;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz childrow[getCols().description] = it->name.empty() ? _("Tablet") : it->name ;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz childrow[getCols().thumbnail] = getPix(PIX_TABLET);
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz // Check if there is an eraser we can link to a pen
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it2 = it->devices.begin(); it2 != it->devices.end(); ++it2 ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz Glib::RefPtr<InputDevice const> dev = *it2;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if ( dev->getSource() == Gdk::SOURCE_PEN ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it3 = it->devices.begin(); it3 != it->devices.end(); ++it3 ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz Glib::RefPtr<InputDevice const> dev2 = *it3;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if ( dev2->getSource() == Gdk::SOURCE_ERASER ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz DeviceManager::getManager().setLinkedTo(dev->getId(), dev2->getId());
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz break; // only check the first eraser... for now
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz break; // only check the first pen... for now
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it2 = it->devices.begin(); it2 != it->devices.end(); ++it2 ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz Glib::RefPtr<InputDevice const> dev = *it2;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz Gtk::TreeModel::Row deviceRow = *(store->append(childrow.children()));
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().description] = dev->getName();
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().device] = dev;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().mode] = dev->getMode();
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz switch ( dev->getSource() ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz case GDK_SOURCE_MOUSE:
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().thumbnail] = getPix(PIX_CORE);
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz break;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz case GDK_SOURCE_PEN:
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if (deviceRow[getCols().description] == _("pad")) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().thumbnail] = getPix(PIX_SIDEBUTTONS);
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz } else {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().thumbnail] = getPix(PIX_TIP);
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz break;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz case GDK_SOURCE_CURSOR:
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().thumbnail] = getPix(PIX_MOUSE);
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz break;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz case GDK_SOURCE_ERASER:
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().thumbnail] = getPix(PIX_ERASER);
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz break;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz default:
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz ; // nothing
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it = devList.begin(); it != devList.end(); ++it ) {
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz Glib::RefPtr<InputDevice const> dev = *it;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz if ( dev && (consumed.find( dev->getId() ) == consumed.end()) ) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeModel::Row deviceRow = *(store->prepend(/*row.children()*/));
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().description] = dev->getName();
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().device] = dev;
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().mode] = dev->getMode();
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz deviceRow[getCols().thumbnail] = getPix(PIX_CORE);
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
73bd3f9ed5f8ae0bc838a2d064a1aab16a8c8dd2Jon A. Cruz }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz } else {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz g_warning("No devices found");
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. CruzInputDialogImpl::ConfPanel::ConfPanel() :
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::VBox(),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceStore(Gtk::TreeStore::create(getCols())),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceIter(),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree(confDeviceStore),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceScroller(),
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz watcher(*this),
c870ae7adc2b0126da2861678caf8b3fbc240dd8Kris useExt(_("_Use pressure-sensitive tablet (requires restart)"), true),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith save(_("_Save"), true),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith detailsBox(false, 4),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith titleFrame(false, 4),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith titleLabel(""),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisFrame(_("Axes")),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysFrame(_("Keys")),
6ce130b5474f41babc5b7b02552cc150e8161764Kris modeLabel(_("Mode:")),
71ecd9191e4085c399050509d0badaccdffa45d7John Smith modeBox(false, 4)
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceScroller.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceScroller.set_shadow_type(Gtk::SHADOW_IN);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceScroller.add(confDeviceTree);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceScroller.set_size_request(120, 0);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith /* class Foo : public Gtk::TreeModel::ColumnRecord {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz public :
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::TreeModelColumn<Glib::ustring> one;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Foo() {add(one);}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz };
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz static Foo foo;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz //Add the TreeView's view columns:
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz {
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Gtk::CellRendererToggle *rendr = new Gtk::CellRendererToggle();
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Gtk::TreeViewColumn *col = new Gtk::TreeViewColumn("xx", *rendr);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz if (col) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree.append_column(*col);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz col->set_cell_data_func(*rendr, sigc::ptr_fun(setCellStateToggle));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith rendr->signal_toggled().connect(sigc::bind(sigc::ptr_fun(commitCellStateChange), confDeviceStore));
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }*/
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //int expPos = confDeviceTree.append_column("", getCols().expander);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree.append_column("I", getCols().thumbnail);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree.append_column("Bar", getCols().description);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //confDeviceTree.get_column(0)->set_fixed_width(100);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //confDeviceTree.get_column(1)->set_expand();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith/* {
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Gtk::TreeViewColumn *col = new Gtk::TreeViewColumn("X", *rendr);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz if (col) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree.append_column(*col);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz col->set_cell_data_func(*rendr, sigc::ptr_fun(setModeCellString));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith rendr->signal_edited().connect(sigc::bind(sigc::ptr_fun(commitCellModeChange), confDeviceStore));
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz rendr->property_editable() = true;
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }*/
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //confDeviceTree.set_enable_tree_lines();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree.property_enable_tree_lines() = false;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree.property_enable_grid_lines() = false;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree.set_headers_visible(false);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //confDeviceTree.set_expander_column( *confDeviceTree.get_column(expPos - 1) );
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree.get_selection()->signal_changed().connect(sigc::mem_fun(*this, &InputDialogImpl::ConfPanel::onTreeSelect));
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith setupTree( confDeviceStore, confDeviceIter );
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::TreeView> treePtr(&confDeviceTree);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Inkscape::DeviceManager::getManager().signalLinkChanged().connect(sigc::bind(sigc::ptr_fun(&InputDialogImpl::updateDeviceLinks), confDeviceIter, treePtr));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree.expand_all();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz useExt.set_active(Preferences::get()->getBool("/options/useextinput/value"));
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz useExt.signal_toggled().connect(sigc::mem_fun(*this, &InputDialogImpl::ConfPanel::useExtToggled));
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#if WITH_GTKMM_3_0
c42ca006cc2593efa9a0ea19f2680ea9d5792654Markus Engel Gtk::ButtonBox *buttonBox = Gtk::manage(new Gtk::ButtonBox);
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#else
c42ca006cc2593efa9a0ea19f2680ea9d5792654Markus Engel Gtk::HButtonBox *buttonBox = Gtk::manage (new Gtk::HButtonBox);
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis#endif
f57e4989444c194dd2fcacffdbe0ea94a5ed7c14Alex Valavanis
71ecd9191e4085c399050509d0badaccdffa45d7John Smith buttonBox->set_layout (Gtk::BUTTONBOX_END);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //Gtk::Alignment *align = new Gtk::Alignment(Gtk::ALIGN_END, Gtk::ALIGN_START, 0, 0);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith buttonBox->add(save);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz save.signal_clicked().connect(sigc::mem_fun(*this, &InputDialogImpl::ConfPanel::saveSettings));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith titleFrame.pack_start(titleLabel, true, true);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //titleFrame.set_shadow_type(Gtk::SHADOW_IN);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith modeCombo.append(getModeToString()[Gdk::MODE_DISABLED]);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith modeCombo.append(getModeToString()[Gdk::MODE_SCREEN]);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith modeCombo.append(getModeToString()[Gdk::MODE_WINDOW]);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith modeCombo.set_tooltip_text(_("A device can be 'Disabled', its co-ordinates mapped to the whole 'Screen', or to a single (usually focused) 'Window'"));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith modeCombo.signal_changed().connect(sigc::mem_fun(*this, &InputDialogImpl::ConfPanel::onModeChange));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith modeBox.pack_start(modeLabel, false, false);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith modeBox.pack_start(modeCombo, true, true);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisVBox.add(axisScroll);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisFrame.add(axisVBox);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysFrame.add(keysScroll);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith /**
71ecd9191e4085c399050509d0badaccdffa45d7John Smith * Scrolled Window
71ecd9191e4085c399050509d0badaccdffa45d7John Smith */
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysScroll.add(keysTree);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysScroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysScroll.set_shadow_type(Gtk::SHADOW_IN);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysScroll.set_size_request(120, 80);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysStore = Gtk::ListStore::create(keysColumns);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith _kb_shortcut_renderer.property_editable() = true;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysTree.set_model(keysStore);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysTree.set_headers_visible(false);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysTree.append_column("Name", keysColumns.name);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysTree.append_column("Value", keysColumns.value);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //keysTree.append_column("Value", _kb_shortcut_renderer);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //keysTree.get_column(1)->add_attribute(_kb_shortcut_renderer.property_text(), keysColumns.value);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //_kb_shortcut_renderer.signal_accel_edited().connect( sigc::mem_fun(*this, &InputDialogImpl::onKBTreeEdited) );
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //_kb_shortcut_renderer.signal_accel_cleared().connect( sigc::mem_fun(*this, &InputDialogImpl::onKBTreeCleared) );
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisStore = Gtk::ListStore::create(axisColumns);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTree.set_model(axisStore);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTree.set_headers_visible(false);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTree.append_column("Name", axisColumns.name);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTree.append_column("Value", axisColumns.value);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith /**
71ecd9191e4085c399050509d0badaccdffa45d7John Smith * Scrolled Window
71ecd9191e4085c399050509d0badaccdffa45d7John Smith */
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisScroll.add(axisTree);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisScroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisScroll.set_shadow_type(Gtk::SHADOW_IN);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisScroll.set_size_request(0, 150);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith pane.pack1(confDeviceScroller);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith pane.pack2(detailsBox);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith detailsBox.pack_start(titleFrame, false, false, 6);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith detailsBox.pack_start(modeBox, false, false, 6);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith detailsBox.pack_start(axisFrame, false, false);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith detailsBox.pack_start(keysFrame, false, false);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith pack_start(pane, true, true);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith pack_start(useExt, Gtk::PACK_SHRINK);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith pack_start(*buttonBox, false, false);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith // Select the first device
71ecd9191e4085c399050509d0badaccdffa45d7John Smith confDeviceTree.get_selection()->select(confDeviceStore->get_iter("0"));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. CruzInputDialogImpl::ConfPanel::~ConfPanel()
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruzvoid InputDialogImpl::ConfPanel::setModeCellString(Gtk::CellRenderer *rndr, Gtk::TreeIter const &iter)
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (iter) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::CellRendererCombo *combo = dynamic_cast<Gtk::CellRendererCombo *>(rndr);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (combo) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<InputDevice const> dev = (*iter)[getCols().device];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gdk::InputMode mode = (*iter)[getCols().mode];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (dev && (getModeToString().find(mode) != getModeToString().end())) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz combo->property_text() = getModeToString()[mode];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz } else {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz combo->property_text() = "";
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruzvoid InputDialogImpl::ConfPanel::commitCellModeChange(Glib::ustring const &path, Glib::ustring const &newText, Glib::RefPtr<Gtk::TreeStore> store)
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::TreeIter iter = store->get_iter(path);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (iter) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<InputDevice const> dev = (*iter)[getCols().device];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (dev && (getStringToMode().find(newText) != getStringToMode().end())) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gdk::InputMode mode = getStringToMode()[newText];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Inkscape::DeviceManager::getManager().setMode( dev->getId(), mode );
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruzvoid InputDialogImpl::ConfPanel::setCellStateToggle(Gtk::CellRenderer *rndr, Gtk::TreeIter const &iter)
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz{
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz if (iter) {
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Gtk::CellRendererToggle *toggle = dynamic_cast<Gtk::CellRendererToggle *>(rndr);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz if (toggle) {
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Glib::RefPtr<InputDevice const> dev = (*iter)[getCols().device];
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz if (dev) {
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Gdk::InputMode mode = (*iter)[getCols().mode];
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz toggle->set_active(mode != Gdk::MODE_DISABLED);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz } else {
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz toggle->set_active(false);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz }
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz }
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz }
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz}
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruzvoid InputDialogImpl::ConfPanel::commitCellStateChange(Glib::ustring const &path, Glib::RefPtr<Gtk::TreeStore> store)
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz{
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Gtk::TreeIter iter = store->get_iter(path);
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz if (iter) {
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Glib::RefPtr<InputDevice const> dev = (*iter)[getCols().device];
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz if (dev) {
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Gdk::InputMode mode = (*iter)[getCols().mode];
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz if (mode == Gdk::MODE_DISABLED) {
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Inkscape::DeviceManager::getManager().setMode( dev->getId(), Gdk::MODE_SCREEN );
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz } else {
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz Inkscape::DeviceManager::getManager().setMode( dev->getId(), Gdk::MODE_DISABLED );
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz }
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz }
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz }
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz}
dd20e16383a9d1bea048d58581e19a7adb5196ccJon A. Cruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smithvoid InputDialogImpl::ConfPanel::onTreeSelect()
71ecd9191e4085c399050509d0badaccdffa45d7John Smith{
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::TreeSelection> treeSel = confDeviceTree.get_selection();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeModel::iterator iter = treeSel->get_selected();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith if (iter) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeModel::Row row = *iter;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::ustring val = row[getCols().description];
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<InputDevice const> dev = row[getCols().device];
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gdk::InputMode mode = (*iter)[getCols().mode];
71ecd9191e4085c399050509d0badaccdffa45d7John Smith modeCombo.set_active(getModeId(mode));
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith titleLabel.set_markup("<b>" + row[getCols().description] + "</b>");
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith if (dev) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith setKeys(dev->getNumKeys());
71ecd9191e4085c399050509d0badaccdffa45d7John Smith setAxis(dev->getNumAxes());
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruzvoid InputDialogImpl::ConfPanel::saveSettings()
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Inkscape::DeviceManager::getManager().saveConfig();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruzvoid InputDialogImpl::ConfPanel::useExtToggled()
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz bool active = useExt.get_active();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (active != Preferences::get()->getBool("/options/useextinput/value")) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Preferences::get()->setBool("/options/useextinput/value", active);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (active) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz // As a work-around for a common problem, enable tablet toggles on the calligraphic tool.
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz // Covered in Launchpad bug #196195.
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Preferences::get()->setBool("/tools/tweak/usepressure", true);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Preferences::get()->setBool("/tools/calligraphic/usepressure", true);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Preferences::get()->setBool("/tools/calligraphic/usetilt", true);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. CruzInputDialogImpl::ConfPanel::Blink::Blink(ConfPanel &parent) :
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Preferences::Observer("/options/useextinput/value"),
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz parent(parent)
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Preferences::get()->addObserver(*this);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. CruzInputDialogImpl::ConfPanel::Blink::~Blink()
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Preferences::get()->removeObserver(*this);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz}
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruzvoid InputDialogImpl::ConfPanel::Blink::notify(Preferences::Entry const &new_val)
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz{
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz parent.useExt.set_active(new_val.getBool());
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz}
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
9e681e203a208a1994e83056bbba03f43361c6ffJon A. Cruzvoid InputDialogImpl::handleDeviceChange(Glib::RefPtr<InputDevice const> device)
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz{
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz// g_message("OUCH!!!! for %p hits %s", &device, device->getId().c_str());
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz std::vector<Glib::RefPtr<Gtk::TreeStore> > stores;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith stores.push_back(deviceStore);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith stores.push_back(cfgPanel.confDeviceStore);
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz for (std::vector<Glib::RefPtr<Gtk::TreeStore> >::iterator it = stores.begin(); it != stores.end(); ++it) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::TreeModel::iterator deviceIter;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz (*it)->foreach_iter( sigc::bind<Glib::ustring, Gtk::TreeModel::iterator*>(
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz sigc::ptr_fun(&InputDialogImpl::findDevice),
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz device->getId(),
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz &deviceIter) );
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if ( deviceIter ) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gdk::InputMode mode = device->getMode();
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Gtk::TreeModel::Row row = *deviceIter;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (row[getCols().mode] != mode) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz row[getCols().mode] = mode;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz}
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz
9e681e203a208a1994e83056bbba03f43361c6ffJon A. Cruzvoid InputDialogImpl::updateDeviceAxes(Glib::RefPtr<InputDevice const> device)
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz{
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz gint live = device->getLiveAxes();
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz std::map<guint, std::pair<guint, gdouble> > existing = axesMap[device->getId()];
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz gint mask = 0x1;
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz for ( gint num = 0; num < 32; num++, mask <<= 1) {
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz if ( (mask & live) != 0 ) {
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz if ( (existing.find(num) == existing.end()) || (existing[num].first < 2) ) {
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz axesMap[device->getId()][num].first = 2;
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz axesMap[device->getId()][num].second = 0.0;
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz }
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz }
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz }
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz updateTestAxes( device->getId(), 0 );
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz}
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz
9e681e203a208a1994e83056bbba03f43361c6ffJon A. Cruzvoid InputDialogImpl::updateDeviceButtons(Glib::RefPtr<InputDevice const> device)
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz{
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz gint live = device->getLiveButtons();
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz std::set<guint> existing = buttonMap[device->getId()];
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz gint mask = 0x1;
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz for ( gint num = 0; num < 32; num++, mask <<= 1) {
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz if ( (mask & live) != 0 ) {
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz if ( existing.find(num) == existing.end() ) {
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz buttonMap[device->getId()].insert(num);
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz updateTestButtons(device->getId(), -1);
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz}
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruzbool InputDialogImpl::findDevice(const Gtk::TreeModel::iterator& iter,
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz Glib::ustring id,
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz Gtk::TreeModel::iterator* result)
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz{
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz bool stop = false;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<InputDevice const> dev = (*iter)[getCols().device];
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( dev && (dev->getId() == id) ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( result ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz *result = iter;
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz stop = true;
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz return stop;
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz}
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruzbool InputDialogImpl::findDeviceByLink(const Gtk::TreeModel::iterator& iter,
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz Glib::ustring link,
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz Gtk::TreeModel::iterator* result)
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz{
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz bool stop = false;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<InputDevice const> dev = (*iter)[getCols().device];
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( dev && (dev->getLink() == link) ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( result ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz *result = iter;
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz stop = true;
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz return stop;
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz}
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
9e681e203a208a1994e83056bbba03f43361c6ffJon A. Cruzvoid InputDialogImpl::updateDeviceLinks(Glib::RefPtr<InputDevice const> device, Gtk::TreeIter tabletIter, Glib::RefPtr<Gtk::TreeView> tree)
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz{
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::TreeStore> deviceStore = Glib::RefPtr<Gtk::TreeStore>::cast_dynamic(tree->get_model());
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz// g_message("Links!!!! for %p hits [%s] with link of [%s]", &device, device->getId().c_str(), device->getLink().c_str());
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz Gtk::TreeModel::iterator deviceIter;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceStore->foreach_iter( sigc::bind<Glib::ustring, Gtk::TreeModel::iterator*>(
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz sigc::ptr_fun(&InputDialogImpl::findDevice),
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz device->getId(),
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz &deviceIter) );
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( deviceIter ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz // Found the device concerned. Can proceed.
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( device->getLink().empty() ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz // is now unlinked
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz// g_message("Item %s is unlinked", device->getId().c_str());
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( deviceIter->parent() != tabletIter ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz // Not the child of the tablet. move on up
f11c59cb3f794a30504cb373fc8239433fd7c20fJon A. Cruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<InputDevice const> dev = (*deviceIter)[getCols().device];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::ustring descr = (*deviceIter)[getCols().description];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<Gdk::Pixbuf> thumb = (*deviceIter)[getCols().thumbnail];
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeModel::Row deviceRow = *deviceStore->append(tabletIter->children());
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().description] = descr;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().thumbnail] = thumb;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().device] = dev;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().mode] = dev->getMode();
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz Gtk::TreeModel::iterator oldParent = deviceIter->parent();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceStore->erase(deviceIter);
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( oldParent->children().empty() ) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceStore->erase(oldParent);
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz } else {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz // is linking
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( deviceIter->parent() == tabletIter ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz // Simple case. Not already linked
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeIter newGroup = deviceStore->append(tabletIter->children());
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz (*newGroup)[getCols().description] = _("Pen");
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz (*newGroup)[getCols().thumbnail] = getPix(PIX_PEN);
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<InputDevice const> dev = (*deviceIter)[getCols().device];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::ustring descr = (*deviceIter)[getCols().description];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<Gdk::Pixbuf> thumb = (*deviceIter)[getCols().thumbnail];
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeModel::Row deviceRow = *deviceStore->append(newGroup->children());
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().description] = descr;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().thumbnail] = thumb;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().device] = dev;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().mode] = dev->getMode();
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
f11c59cb3f794a30504cb373fc8239433fd7c20fJon A. Cruz
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz Gtk::TreeModel::iterator linkIter;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceStore->foreach_iter( sigc::bind<Glib::ustring, Gtk::TreeModel::iterator*>(
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz sigc::ptr_fun(&InputDialogImpl::findDeviceByLink),
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz device->getId(),
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz &linkIter) );
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( linkIter ) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz dev = (*linkIter)[getCols().device];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz descr = (*linkIter)[getCols().description];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz thumb = (*linkIter)[getCols().thumbnail];
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceRow = *deviceStore->append(newGroup->children());
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().description] = descr;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().thumbnail] = thumb;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().device] = dev;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz deviceRow[getCols().mode] = dev->getMode();
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz Gtk::TreeModel::iterator oldParent = linkIter->parent();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceStore->erase(linkIter);
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( oldParent->children().empty() ) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceStore->erase(oldParent);
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz Gtk::TreeModel::iterator oldParent = deviceIter->parent();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceStore->erase(deviceIter);
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( oldParent->children().empty() ) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith deviceStore->erase(oldParent);
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
9e681e203a208a1994e83056bbba03f43361c6ffJon A. Cruz tree->expand_row(Gtk::TreePath(newGroup), true);
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz}
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruzvoid InputDialogImpl::linkComboChanged() {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::TreeSelection> treeSel = deviceTree.get_selection();
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz Gtk::TreeModel::iterator iter = treeSel->get_selected();
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz if (iter) {
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz Gtk::TreeModel::Row row = *iter;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::ustring val = row[getCols().description];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<InputDevice const> dev = row[getCols().device];
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz if ( dev ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( linkCombo.get_active_row_number() == 0 ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz // It is the "None" entry
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz DeviceManager::getManager().setLinkedTo(dev->getId(), "");
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz } else {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz Glib::ustring linkName = linkCombo.get_active_text();
f11c59cb3f794a30504cb373fc8239433fd7c20fJon A. Cruz std::list<Glib::RefPtr<InputDevice const> > devList = Inkscape::DeviceManager::getManager().getDevices();
f11c59cb3f794a30504cb373fc8239433fd7c20fJon A. Cruz for ( std::list<Glib::RefPtr<InputDevice const> >::const_iterator it = devList.begin(); it != devList.end(); ++it ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz if ( linkName == (*it)->getName() ) {
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz DeviceManager::getManager().setLinkedTo(dev->getId(), (*it)->getId());
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz break;
0edc248c6edb75f5cbef095bf782eaf8273a6514joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz}
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruzvoid InputDialogImpl::resyncToSelection() {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz bool clear = true;
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::TreeSelection> treeSel = deviceTree.get_selection();
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::TreeModel::iterator iter = treeSel->get_selected();
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz if (iter) {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Gtk::TreeModel::Row row = *iter;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::ustring val = row[getCols().description];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<InputDevice const> dev = row[getCols().device];
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz if ( dev ) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.set_sensitive(true);
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz linkConnection.block();
42345039880217340bb50cfa9692a75851e0766aAlex Valavanis linkCombo.remove_all();
42345039880217340bb50cfa9692a75851e0766aAlex Valavanis linkCombo.append(_("None"));
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz linkCombo.set_active(0);
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz if ( dev->getSource() != Gdk::SOURCE_MOUSE ) {
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz Glib::ustring linked = dev->getLink();
f11c59cb3f794a30504cb373fc8239433fd7c20fJon A. Cruz std::list<Glib::RefPtr<InputDevice const> > devList = Inkscape::DeviceManager::getManager().getDevices();
f11c59cb3f794a30504cb373fc8239433fd7c20fJon A. Cruz for ( std::list<Glib::RefPtr<InputDevice const> >::const_iterator it = devList.begin(); it != devList.end(); ++it ) {
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz if ( ((*it)->getSource() != Gdk::SOURCE_MOUSE) && ((*it) != dev) ) {
42345039880217340bb50cfa9692a75851e0766aAlex Valavanis linkCombo.append((*it)->getName().c_str());
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz if ( (linked.length() > 0) && (linked == (*it)->getId()) ) {
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz linkCombo.set_active_text((*it)->getName().c_str());
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz linkCombo.set_sensitive(true);
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz } else {
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz linkCombo.set_sensitive(false);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz linkConnection.unblock();
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz clear = false;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz devName.set_label(row[getCols().description]);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisFrame.set_label(row[getCols().description]);
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz setupValueAndCombo( dev->getNumAxes(), dev->getNumAxes(), devAxesCount, axesCombo);
55919b10f5e27d2fa50c03ca269bce594f5c8d82joncruz setupValueAndCombo( dev->getNumKeys(), dev->getNumKeys(), devKeyCount, buttonCombo);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisTable.set_sensitive(!clear);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz if (clear) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisFrame.set_label("");
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz devName.set_label("");
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz devAxesCount.set_label("");
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz devKeyCount.set_label("");
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz}
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
71ecd9191e4085c399050509d0badaccdffa45d7John Smithvoid InputDialogImpl::ConfPanel::setAxis(gint count)
71ecd9191e4085c399050509d0badaccdffa45d7John Smith{
71ecd9191e4085c399050509d0badaccdffa45d7John Smith /*
71ecd9191e4085c399050509d0badaccdffa45d7John Smith * TODO - Make each axis editable
71ecd9191e4085c399050509d0badaccdffa45d7John Smith */
71ecd9191e4085c399050509d0badaccdffa45d7John Smith axisStore->clear();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith static Glib::ustring axesLabels[6] = {_("X"), _("Y"), _("Pressure"), _("X tilt"), _("Y tilt"), _("Wheel")};
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith for ( gint barNum = 0; barNum < static_cast<gint>(G_N_ELEMENTS(axesLabels)); barNum++ ) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeModel::Row row = *(axisStore->append());
71ecd9191e4085c399050509d0badaccdffa45d7John Smith row[axisColumns.name] = axesLabels[barNum];
71ecd9191e4085c399050509d0badaccdffa45d7John Smith if (barNum < count) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith row[axisColumns.value] = Glib::ustring::format(barNum+1);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith } else {
05445c57397b3e794e8d49df2f80af94d294da78JazzyNico row[axisColumns.value] = C_("Input device axe", "None");
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith}
71ecd9191e4085c399050509d0badaccdffa45d7John Smithvoid InputDialogImpl::ConfPanel::setKeys(gint count)
71ecd9191e4085c399050509d0badaccdffa45d7John Smith{
71ecd9191e4085c399050509d0badaccdffa45d7John Smith /*
71ecd9191e4085c399050509d0badaccdffa45d7John Smith * TODO - Make each key assignable
71ecd9191e4085c399050509d0badaccdffa45d7John Smith */
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith keysStore->clear();
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith for (gint i = 0; i < count; i++) {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Gtk::TreeModel::Row row = *(keysStore->append());
71ecd9191e4085c399050509d0badaccdffa45d7John Smith row[keysColumns.name] = Glib::ustring::format(i+1);
71ecd9191e4085c399050509d0badaccdffa45d7John Smith row[keysColumns.value] = _("Disabled");
71ecd9191e4085c399050509d0badaccdffa45d7John Smith }
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith
71ecd9191e4085c399050509d0badaccdffa45d7John Smith}
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruzvoid InputDialogImpl::setupValueAndCombo( gint reported, gint actual, Gtk::Label& label, Gtk::ComboBoxText& combo )
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz{
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz gchar *tmp = g_strdup_printf("%d", reported);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz label.set_label(tmp);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz g_free(tmp);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
42345039880217340bb50cfa9692a75851e0766aAlex Valavanis combo.remove_all();
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz for ( gint i = 1; i <= reported; ++i ) {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz tmp = g_strdup_printf("%d", i);
42345039880217340bb50cfa9692a75851e0766aAlex Valavanis combo.append(tmp);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz g_free(tmp);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz if ( (1 <= actual) && (actual <= reported) ) {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz combo.set_active(actual - 1);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz}
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruzvoid InputDialogImpl::updateTestButtons( Glib::ustring const& key, gint hotButton )
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz{
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz for ( gint i = 0; i < static_cast<gint>(G_N_ELEMENTS(testButtons)); i++ ) {
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz if ( buttonMap[key].find(i) != buttonMap[key].end() ) {
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz if ( i == hotButton ) {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testButtons[i].set(getPix(PIX_BUTTONS_ON));
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz } else {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testButtons[i].set(getPix(PIX_BUTTONS_OFF));
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz }
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz } else {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testButtons[i].set(getPix(PIX_BUTTONS_NONE));
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz }
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz }
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz}
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruzvoid InputDialogImpl::updateTestAxes( Glib::ustring const& key, GdkDevice* dev )
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz{
71ecd9191e4085c399050509d0badaccdffa45d7John Smith //static gdouble epsilon = 0.0001;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz {
71ecd9191e4085c399050509d0badaccdffa45d7John Smith Glib::RefPtr<Gtk::TreeSelection> treeSel = deviceTree.get_selection();
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz Gtk::TreeModel::iterator iter = treeSel->get_selected();
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if (iter) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz Gtk::TreeModel::Row row = *iter;
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::ustring val = row[getCols().description];
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz Glib::RefPtr<InputDevice const> idev = row[getCols().device];
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if ( !idev || (idev->getId() != key) ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz dev = 0;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz for ( gint i = 0; i < static_cast<gint>(G_N_ELEMENTS(testAxes)); i++ ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if ( axesMap[key].find(i) != axesMap[key].end() ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz switch ( axesMap[key][i].first ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz case 0:
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz case 1:
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testAxes[i].set(getPix(PIX_AXIS_NONE));
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if ( dev && (i < static_cast<gint>(G_N_ELEMENTS(axesValues)) ) ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz axesValues[i].set_sensitive(false);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz break;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz case 2:
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testAxes[i].set(getPix(PIX_AXIS_OFF));
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz axesValues[i].set_sensitive(true);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if ( dev && (i < static_cast<gint>(G_N_ELEMENTS(axesValues)) ) ) {
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis // FIXME: Device axis ranges are inaccessible in GTK+ 3 and
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen // are deprecated in GTK+ 2. Progress-bar ranges are disabled
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen // until we find an alternative solution
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis // if ( (dev->axes[i].max - dev->axes[i].min) > epsilon ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz axesValues[i].set_sensitive(true);
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis // axesValues[i].set_fraction( (axesMap[key][i].second- dev->axes[i].min) / (dev->axes[i].max - dev->axes[i].min) );
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis // }
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis
d5edbcb9362e1d1e28bf53abade939e610bb3cd4joncruz gchar* str = g_strdup_printf("%f", axesMap[key][i].second);
d5edbcb9362e1d1e28bf53abade939e610bb3cd4joncruz axesValues[i].set_text(str);
d5edbcb9362e1d1e28bf53abade939e610bb3cd4joncruz g_free(str);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz break;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz case 3:
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testAxes[i].set(getPix(PIX_AXIS_ON));
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz axesValues[i].set_sensitive(true);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if ( dev && (i < static_cast<gint>(G_N_ELEMENTS(axesValues)) ) ) {
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis // FIXME: Device axis ranges are inaccessible in GTK+ 3 and
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen // are deprecated in GTK+ 2. Progress-bar ranges are disabled
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen // until we find an alternative solution
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen // if ( (dev->axes[i].max - dev->axes[i].min) > epsilon ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz axesValues[i].set_sensitive(true);
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis // axesValues[i].set_fraction( (axesMap[key][i].second- dev->axes[i].min) / (dev->axes[i].max - dev->axes[i].min) );
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis // }
bcb1019023902eb379460ceed42a63b9ffc703ddAlex Valavanis
d5edbcb9362e1d1e28bf53abade939e610bb3cd4joncruz gchar* str = g_strdup_printf("%f", axesMap[key][i].second);
d5edbcb9362e1d1e28bf53abade939e610bb3cd4joncruz axesValues[i].set_text(str);
d5edbcb9362e1d1e28bf53abade939e610bb3cd4joncruz g_free(str);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz } else {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testAxes[i].set(getPix(PIX_AXIS_NONE));
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if ( !dev ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz for ( gint i = 0; i < static_cast<gint>(G_N_ELEMENTS(axesValues)); i++ ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz axesValues[i].set_fraction(0.0);
d5edbcb9362e1d1e28bf53abade939e610bb3cd4joncruz axesValues[i].set_text("");
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz axesValues[i].set_sensitive(false);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz}
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanisvoid InputDialogImpl::mapAxesValues( Glib::ustring const& key, gdouble const * axes, GdkDevice* dev )
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz{
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis guint numAxes = gdk_device_get_n_axes(dev);
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz static gdouble epsilon = 0.0001;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if ( (numAxes > 0) && axes) {
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz for ( guint axisNum = 0; axisNum < numAxes; axisNum++ ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz // 0 == new, 1 == set value, 2 == changed value, 3 == active
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz gdouble diff = axesMap[key][axisNum].second - axes[axisNum];
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz switch(axesMap[key][axisNum].first) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz case 0:
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz {
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz axesMap[key][axisNum].first = 1;
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz axesMap[key][axisNum].second = axes[axisNum];
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz break;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz case 1:
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if ( (diff > epsilon) || (diff < -epsilon) ) {
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz// g_message("Axis %d changed on %s]", axisNum, key.c_str());
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz axesMap[key][axisNum].first = 3;
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz axesMap[key][axisNum].second = axes[axisNum];
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz updateTestAxes(key, dev);
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz DeviceManager::getManager().addAxis(key, axisNum);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz break;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz case 2:
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if ( (diff > epsilon) || (diff < -epsilon) ) {
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz axesMap[key][axisNum].first = 3;
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz axesMap[key][axisNum].second = axes[axisNum];
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz updateTestAxes(key, dev);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz break;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz case 3:
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz if ( (diff > epsilon) || (diff < -epsilon) ) {
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz axesMap[key][axisNum].second = axes[axisNum];
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz } else {
5cb9a421ea3ff6d5fd2504f5e38f6014082dcb67joncruz axesMap[key][axisNum].first = 2;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz updateTestAxes(key, dev);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz }
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz // std::map<Glib::ustring, std::map<guint, std::pair<guint, gdouble> > > axesMap;
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz}
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruzGlib::ustring InputDialogImpl::getKeyFor( GdkDevice* device )
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz{
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz Glib::ustring key;
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis GdkInputSource source = gdk_device_get_source(device);
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis const gchar *name = gdk_device_get_name(device);
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis switch ( source ) {
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz case GDK_SOURCE_MOUSE:
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz key = "M:";
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz break;
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz case GDK_SOURCE_CURSOR:
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz key = "C:";
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz break;
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz case GDK_SOURCE_PEN:
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz key = "P:";
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz break;
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz case GDK_SOURCE_ERASER:
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz key = "E:";
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz break;
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz default:
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz key = "?:";
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz }
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis key += name;
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz return key;
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz}
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruzbool InputDialogImpl::eventSnoop(GdkEvent* event)
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz{
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz int modmod = 0;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz GdkInputSource source = lastSourceSeen;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Glib::ustring devName = lastDevnameSeen;
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz Glib::ustring key;
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz gint hotButton = -1;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz switch ( event->type ) {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz case GDK_KEY_PRESS:
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz case GDK_KEY_RELEASE:
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz GdkEventKey* keyEvt = reinterpret_cast<GdkEventKey*>(event);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz gchar* name = gtk_accelerator_name(keyEvt->keyval, static_cast<GdkModifierType>(keyEvt->state));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz keyVal.set_label(name);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// g_message("%d KEY state:0x%08x 0x%04x [%s]", keyEvt->type, keyEvt->state, keyEvt->keyval, name);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz g_free(name);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz break;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz case GDK_BUTTON_PRESS:
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz modmod = 1;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz // fallthrough
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz case GDK_BUTTON_RELEASE:
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz GdkEventButton* btnEvt = reinterpret_cast<GdkEventButton*>(event);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz if ( btnEvt->device ) {
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz key = getKeyFor(btnEvt->device);
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen source = gdk_device_get_source(btnEvt->device);
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen devName = gdk_device_get_name(btnEvt->device);
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis mapAxesValues(key, btnEvt->axes, btnEvt->device);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz if ( buttonMap[key].find(btnEvt->button) == buttonMap[key].end() ) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// g_message("New button found for %s = %d", key.c_str(), btnEvt->button);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz buttonMap[key].insert(btnEvt->button);
d70ad7a28e89c69b96ec96e311aeef00b0f506f2joncruz DeviceManager::getManager().addButton(key, btnEvt->button);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz hotButton = modmod ? btnEvt->button : -1;
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz updateTestButtons(key, hotButton);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz gchar* name = gtk_accelerator_name(0, static_cast<GdkModifierType>(btnEvt->state));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz keyVal.set_label(name);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// g_message("%d BTN state:0x%08x %c %4d [%s] dev:%p [%s] ",
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// btnEvt->type, btnEvt->state,
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// (modmod ? '+':'-'),
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// btnEvt->button, name, btnEvt->device,
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// (btnEvt->device ? btnEvt->device->name : "null")
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// );
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz g_free(name);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz break;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz case GDK_MOTION_NOTIFY:
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz GdkEventMotion* btnMtn = reinterpret_cast<GdkEventMotion*>(event);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz if ( btnMtn->device ) {
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz key = getKeyFor(btnMtn->device);
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen source = gdk_device_get_source(btnMtn->device);
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen devName = gdk_device_get_name(btnMtn->device);
3d45180e534ab199b01638bc14a9852b09f960d2Alex Valavanis mapAxesValues(key, btnMtn->axes, btnMtn->device);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz gchar* name = gtk_accelerator_name(0, static_cast<GdkModifierType>(btnMtn->state));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz keyVal.set_label(name);
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// g_message("%d MOV state:0x%08x [%s] dev:%p [%s] %3.2f %3.2f %3.2f %3.2f %3.2f %3.2f", btnMtn->type, btnMtn->state,
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// name, btnMtn->device,
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// (btnMtn->device ? btnMtn->device->name : "null"),
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// ((btnMtn->device && btnMtn->axes && (btnMtn->device->num_axes > 0)) ? btnMtn->axes[0]:0),
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// ((btnMtn->device && btnMtn->axes && (btnMtn->device->num_axes > 1)) ? btnMtn->axes[1]:0),
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// ((btnMtn->device && btnMtn->axes && (btnMtn->device->num_axes > 2)) ? btnMtn->axes[2]:0),
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// ((btnMtn->device && btnMtn->axes && (btnMtn->device->num_axes > 3)) ? btnMtn->axes[3]:0),
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// ((btnMtn->device && btnMtn->axes && (btnMtn->device->num_axes > 4)) ? btnMtn->axes[4]:0),
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// ((btnMtn->device && btnMtn->axes && (btnMtn->device->num_axes > 5)) ? btnMtn->axes[5]:0)
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// );
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz g_free(name);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz break;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz default:
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz ;// nothing
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz if ( (lastSourceSeen != source) || (lastDevnameSeen != devName) ) {
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz switch (source) {
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen case GDK_SOURCE_MOUSE: {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testThumb.set(getPix(PIX_CORE));
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen break;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen case GDK_SOURCE_CURSOR: {
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen// g_message("flip to cursor");
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testThumb.set(getPix(PIX_MOUSE));
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen break;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen case GDK_SOURCE_PEN: {
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz if (devName == _("pad")) {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// g_message("flip to pad");
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testThumb.set(getPix(PIX_SIDEBUTTONS));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz } else {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// g_message("flip to pen");
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testThumb.set(getPix(PIX_TIP));
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen break;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen case GDK_SOURCE_ERASER: {
3095d406b8f21b2d15939d51c34ec4b0f3c2e558joncruz// g_message("flip to eraser");
e27725d84d44011b7512665d18ffad32224e1cf1Jon A. Cruz testThumb.set(getPix(PIX_ERASER));
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen break;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen#if WITH_GTKMM_3_0
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen /// \fixme GTK3 added new GDK_SOURCEs that should be handled here!
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen case GDK_SOURCE_KEYBOARD:
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen case GDK_SOURCE_TOUCHSCREEN:
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen case GDK_SOURCE_TOUCHPAD: {
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen g_warning("InputDialogImpl::eventSnoop : unhandled GDK_SOURCE type!");
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen break;
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen }
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen#endif
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
95cae12d683815602053261a2dee97aba4fdd617Johan B. C. Engelen
9fbb9b436020e98c41eb85dbaadcc2e3226c53b2joncruz updateTestButtons(key, hotButton);
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz lastSourceSeen = source;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz lastDevnameSeen = devName;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz }
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz return false;
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz}
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz} // end namespace Inkscape
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz} // end namespace UI
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz} // end namespace Dialog
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz/*
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz Local Variables:
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz mode:c++
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz c-file-style:"stroustrup"
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz indent-tabs-mode:nil
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz fill-column:99
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz End:
b1fd0330076a954f02eb6a6a7879a90cb1886557joncruz*/
a4030d5ca449e7e384bc699cd249ee704faaeab0Chris Morgan// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :