331
332
class DeviceModelColumns : public Gtk::TreeModel::ColumnRecord
335
Gtk::TreeModelColumn<bool> toggler;
336
Gtk::TreeModelColumn<Glib::ustring> expander;
334
337
Gtk::TreeModelColumn<Glib::ustring> description;
335
Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > thumbnail;
338
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > thumbnail;
336
339
Gtk::TreeModelColumn<Glib::RefPtr<InputDevice const> > device;
337
340
Gtk::TreeModelColumn<Gdk::InputMode> mode;
339
DeviceModelColumns() { add(description); add(thumbnail); add(device); add(mode); }
342
DeviceModelColumns() { add(toggler), add(expander), add(description); add(thumbnail); add(device); add(mode); }
342
345
static std::map<Gdk::InputMode, Glib::ustring> &getModeToString()
727
771
Gtk::TreeModel::Row row = *(store->append());
728
772
row[getCols().description] = _("Hardware");
730
tablet = store->append(row.children());
731
Gtk::TreeModel::Row childrow = *tablet;
732
childrow[getCols().description] = _("Tablet");
733
childrow[getCols().thumbnail] = getPix(PIX_TABLET);
774
// Let's make some tablets!!!
775
std::list<TabletTmp> tablets;
776
std::set<Glib::ustring> consumed;
778
// Phase 1 - figure out which tablets are present
735
779
for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it = devList.begin(); it != devList.end(); ++it ) {
736
780
Glib::RefPtr<InputDevice const> dev = *it;
738
// g_message("device: name[%s] source[0x%x] mode[0x%x] cursor[%s] axis count[%d] key count[%d]", dev->getName().c_str(), dev->getSource(), dev->getMode(),
739
// dev->hasCursor() ? "Yes":"no", dev->getNumAxes(), dev->getNumKeys());
741
// if ( dev->getSource() != Gdk::SOURCE_MOUSE ) {
743
Gtk::TreeModel::Row deviceRow = *(store->append(childrow.children()));
744
deviceRow[getCols().description] = dev->getName();
745
deviceRow[getCols().device] = dev;
746
deviceRow[getCols().mode] = dev->getMode();
747
switch ( dev->getSource() ) {
748
case GDK_SOURCE_MOUSE:
749
deviceRow[getCols().thumbnail] = getPix(PIX_CORE);
752
if (deviceRow[getCols().description] == _("pad")) {
753
deviceRow[getCols().thumbnail] = getPix(PIX_SIDEBUTTONS);
755
deviceRow[getCols().thumbnail] = getPix(PIX_TIP);
758
case GDK_SOURCE_CURSOR:
759
deviceRow[getCols().thumbnail] = getPix(PIX_MOUSE);
761
case GDK_SOURCE_ERASER:
762
deviceRow[getCols().thumbnail] = getPix(PIX_ERASER);
782
if ( dev->getSource() != Gdk::SOURCE_MOUSE ) {
783
consumed.insert( dev->getId() );
784
if ( tablets.empty() ) {
786
tablets.push_back(tmp);
788
tablets.back().devices.push_back(dev);
769
791
g_warning("Null device in list");
795
// Phase 2 - build a UI for the present devices
796
for ( std::list<TabletTmp>::iterator it = tablets.begin(); it != tablets.end(); ++it ) {
797
tablet = store->append(row.children());
798
Gtk::TreeModel::Row childrow = *tablet;
799
if ( it->name.empty() ) {
800
// Check to see if we can derive one
801
std::list<Glib::ustring> names;
802
for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it2 = it->devices.begin(); it2 != it->devices.end(); ++it2 ) {
803
names.push_back( (*it2)->getName() );
805
Glib::ustring common = getCommon(names);
806
if ( !common.empty() ) {
810
childrow[getCols().description] = it->name.empty() ? _("Tablet") : it->name ;
811
childrow[getCols().thumbnail] = getPix(PIX_TABLET);
813
// Check if there is an eraser we can link to a pen
814
for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it2 = it->devices.begin(); it2 != it->devices.end(); ++it2 ) {
815
Glib::RefPtr<InputDevice const> dev = *it2;
816
if ( dev->getSource() == Gdk::SOURCE_PEN ) {
817
for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it3 = it->devices.begin(); it3 != it->devices.end(); ++it3 ) {
818
Glib::RefPtr<InputDevice const> dev2 = *it3;
819
if ( dev2->getSource() == Gdk::SOURCE_ERASER ) {
820
DeviceManager::getManager().setLinkedTo(dev->getId(), dev2->getId());
821
break; // only check the first eraser... for now
823
break; // only check the first pen... for now
828
for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it2 = it->devices.begin(); it2 != it->devices.end(); ++it2 ) {
829
Glib::RefPtr<InputDevice const> dev = *it2;
830
Gtk::TreeModel::Row deviceRow = *(store->append(childrow.children()));
831
deviceRow[getCols().description] = dev->getName();
832
deviceRow[getCols().device] = dev;
833
deviceRow[getCols().mode] = dev->getMode();
834
switch ( dev->getSource() ) {
835
case GDK_SOURCE_MOUSE:
836
deviceRow[getCols().thumbnail] = getPix(PIX_CORE);
839
if (deviceRow[getCols().description] == _("pad")) {
840
deviceRow[getCols().thumbnail] = getPix(PIX_SIDEBUTTONS);
842
deviceRow[getCols().thumbnail] = getPix(PIX_TIP);
845
case GDK_SOURCE_CURSOR:
846
deviceRow[getCols().thumbnail] = getPix(PIX_MOUSE);
848
case GDK_SOURCE_ERASER:
849
deviceRow[getCols().thumbnail] = getPix(PIX_ERASER);
857
for ( std::list<Glib::RefPtr<InputDevice const> >::iterator it = devList.begin(); it != devList.end(); ++it ) {
858
Glib::RefPtr<InputDevice const> dev = *it;
859
if ( dev && (consumed.find( dev->getId() ) == consumed.end()) ) {
860
Gtk::TreeModel::Row deviceRow = *(store->append(row.children()));
861
deviceRow[getCols().description] = dev->getName();
862
deviceRow[getCols().device] = dev;
863
deviceRow[getCols().mode] = dev->getMode();
864
deviceRow[getCols().thumbnail] = getPix(PIX_CORE);
773
868
g_warning("No devices found");
806
901
row = *(poppers->append());
807
902
row[foo.one] = getModeToString()[Gdk::MODE_WINDOW];
809
Gtk::CellRendererCombo *rendr = new Gtk::CellRendererCombo();
810
rendr->property_model().set_value(poppers);
811
rendr->property_text_column().set_value(0);
812
rendr->property_has_entry() = false;
814
904
//Add the TreeView's view columns:
906
Gtk::CellRendererToggle *rendr = new Gtk::CellRendererToggle();
907
Gtk::TreeViewColumn *col = new Gtk::TreeViewColumn("xx", *rendr);
909
tree.append_column(*col);
910
col->set_cell_data_func(*rendr, sigc::ptr_fun(setCellStateToggle));
911
rendr->signal_toggled().connect(sigc::bind(sigc::ptr_fun(commitCellStateChange), store));
915
int expPos = tree.append_column("", getCols().expander);
815
917
tree.append_column("I", getCols().thumbnail);
816
918
tree.append_column("Bar", getCols().description);
817
Gtk::TreeViewColumn *col = new Gtk::TreeViewColumn("X", *rendr);
819
tree.append_column(*col);
820
col->set_cell_data_func(*rendr, sigc::ptr_fun(setModeCellString));
821
rendr->signal_edited().connect(sigc::bind(sigc::ptr_fun(commitCellModeChange), store));
822
rendr->property_editable() = true;
921
Gtk::CellRendererCombo *rendr = new Gtk::CellRendererCombo();
922
rendr->property_model().set_value(poppers);
923
rendr->property_text_column().set_value(0);
924
rendr->property_has_entry() = false;
925
Gtk::TreeViewColumn *col = new Gtk::TreeViewColumn("X", *rendr);
927
tree.append_column(*col);
928
col->set_cell_data_func(*rendr, sigc::ptr_fun(setModeCellString));
929
rendr->signal_edited().connect(sigc::bind(sigc::ptr_fun(commitCellModeChange), store));
930
rendr->property_editable() = true;
825
934
tree.set_enable_tree_lines();
826
935
tree.set_headers_visible(false);
936
tree.set_expander_column( *tree.get_column(expPos - 1) );
828
938
setupTree( store, tabletIter );
987
void InputDialogImpl::ConfPanel::setCellStateToggle(Gtk::CellRenderer *rndr, Gtk::TreeIter const &iter)
990
Gtk::CellRendererToggle *toggle = dynamic_cast<Gtk::CellRendererToggle *>(rndr);
992
Glib::RefPtr<InputDevice const> dev = (*iter)[getCols().device];
994
Gdk::InputMode mode = (*iter)[getCols().mode];
995
toggle->set_active(mode != Gdk::MODE_DISABLED);
997
toggle->set_active(false);
1003
void InputDialogImpl::ConfPanel::commitCellStateChange(Glib::ustring const &path, Glib::RefPtr<Gtk::TreeStore> store)
1005
Gtk::TreeIter iter = store->get_iter(path);
1007
Glib::RefPtr<InputDevice const> dev = (*iter)[getCols().device];
1009
Gdk::InputMode mode = (*iter)[getCols().mode];
1010
if (mode == Gdk::MODE_DISABLED) {
1011
Inkscape::DeviceManager::getManager().setMode( dev->getId(), Gdk::MODE_SCREEN );
1013
Inkscape::DeviceManager::getManager().setMode( dev->getId(), Gdk::MODE_DISABLED );
877
1019
void InputDialogImpl::ConfPanel::saveSettings()
879
1021
Inkscape::DeviceManager::getManager().saveConfig();