SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MFXEditableTable.cpp
Go to the documentation of this file.
1 /****************************************************************************/
7 // missing_desc
8 /****************************************************************************/
9 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
10 // Copyright (C) 2004-2014 DLR (http://www.dlr.de/) and contributors
11 /****************************************************************************/
12 //
13 // This file is part of SUMO.
14 // SUMO is free software: you can redistribute it and/or modify
15 // it under the terms of the GNU General Public License as published by
16 // the Free Software Foundation, either version 3 of the License, or
17 // (at your option) any later version.
18 //
19 /****************************************************************************/
20 
21 
22 // ===========================================================================
23 // included modules
24 // ===========================================================================
25 #ifdef _MSC_VER
26 #include <windows_config.h>
27 #else
28 #include <config.h>
29 #endif
30 
31 #include <fx.h>
32 #include <fxkeys.h>
33 #include "MFXEditableTable.h"
34 
35 #ifdef CHECK_MEMORY_LEAKS
36 #include <foreign/nvwa/debug_new.h>
37 #endif // CHECK_MEMORY_LEAKS
38 
39 FXDEFMAP(MFXEditableTable) MFXEditableTableMap[] = {
40  FXMAPFUNC(SEL_LEFTBUTTONPRESS, 0, MFXEditableTable::onLeftBtnPress),
41  FXMAPFUNC(SEL_LEFTBUTTONRELEASE, 0, MFXEditableTable::onLeftBtnRelease),
42  FXMAPFUNC(SEL_CLICKED, 0, MFXEditableTable::onLeftBtnClicked),
43  FXMAPFUNC(SEL_RIGHTBUTTONRELEASE, 0, MFXEditableTable::onRightBtnRelease),
44  FXMAPFUNC(SEL_KEYRELEASE, 0, MFXEditableTable::onKeyRelease),
46  // FXMAPFUNC(SEL_TIMEOUT,FXTable::ID_TIPTIMER, MFXEditableTable::onTipTimer),
49 
50  FXMAPFUNC(SEL_COMMAND, FXWindow::ID_HSCROLLED, MFXEditableTable::onHScrollerChanged),
51  FXMAPFUNC(SEL_COMMAND, FXWindow::ID_VSCROLLED, MFXEditableTable::onVScrollerChanged),
52  FXMAPFUNC(SEL_CHANGED, FXWindow::ID_HSCROLLED, MFXEditableTable::onHScrollerDragged),
53  FXMAPFUNC(SEL_CHANGED, FXWindow::ID_VSCROLLED, MFXEditableTable::onVScrollerDragged),
54  /*
55  FXMAPFUNC(SEL_TIMEOUT,FXWindow::ID_AUTOSCROLL,MFXEditableTable::onAutoScroll),
56  FXMAPFUNC(SEL_UNGRABBED,0,MFXEditableTable::onUngrabbed),
57  FXMAPFUNC(SEL_RIGHTBUTTONPRESS,0,MFXEditableTable::onRightBtnPress),
58  FXMAPFUNC(SEL_KEYPRESS,0,MFXEditableTable::onTabKeyPress),
59  FXMAPFUNC(SEL_KEYRELEASE,0,MFXEditableTable::onTabKeyRelease),
60  FXMAPFUNC(SEL_CLIPBOARD_LOST,0,MFXEditableTable::onClipboardLost),
61  FXMAPFUNC(SEL_CLIPBOARD_GAINED,0,MFXEditableTable::onClipboardGained),
62  FXMAPFUNC(SEL_CLIPBOARD_REQUEST,0,MFXEditableTable::onClipboardRequest),
63  FXMAPFUNC(SEL_DOUBLECLICKED,0,MFXEditableTable::onDoubleClicked),
64  FXMAPFUNC(SEL_TRIPLECLICKED,0,MFXEditableTable::onTripleClicked),
65  FXMAPFUNC(SEL_COMMAND,0,MFXEditableTable::onCommand),
66  */
67  /*
68  FXMAPFUNC(SEL_FOCUSIN,0,MFXEditableTable::onFocusIn),
69  FXMAPFUNC(SEL_FOCUSOUT,0,MFXEditableTable::onFocusOut),
70  FXMAPFUNC(SEL_SELECTION_LOST,0,MFXEditableTable::onSelectionLost),
71  FXMAPFUNC(SEL_SELECTION_GAINED,0,MFXEditableTable::onSelectionGained),
72  FXMAPFUNC(SEL_SELECTION_REQUEST,0,MFXEditableTable::onSelectionRequest),
73  */
74 
75  FXMAPFUNC(SEL_UPDATE, FXTable::ID_HORZ_GRID, MFXEditableTable::onUpdHorzGrid),
76  FXMAPFUNC(SEL_UPDATE, FXTable::ID_VERT_GRID, MFXEditableTable::onUpdVertGrid),
77  FXMAPFUNC(SEL_COMMAND, FXTable::ID_HORZ_GRID, MFXEditableTable::onCmdHorzGrid),
78  FXMAPFUNC(SEL_COMMAND, FXTable::ID_VERT_GRID, MFXEditableTable::onCmdVertGrid),
79  FXMAPFUNC(SEL_COMMAND, FXTable::ID_DELETE_COLUMN, MFXEditableTable::onCmdDeleteColumn),
80  FXMAPFUNC(SEL_UPDATE, FXTable::ID_DELETE_COLUMN, MFXEditableTable::onUpdDeleteColumn),
81  FXMAPFUNC(SEL_COMMAND, FXTable::ID_DELETE_ROW, MFXEditableTable::onCmdDeleteRow),
82  FXMAPFUNC(SEL_UPDATE, FXTable::ID_DELETE_ROW, MFXEditableTable::onUpdDeleteRow),
83  FXMAPFUNC(SEL_COMMAND, FXTable::ID_INSERT_COLUMN, MFXEditableTable::onCmdInsertColumn),
84  FXMAPFUNC(SEL_COMMAND, FXTable::ID_INSERT_ROW, MFXEditableTable::onCmdInsertRow),
85 
86  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MOVE_LEFT, MFXEditableTable::onCmdMoveLeft),
87  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MOVE_RIGHT, MFXEditableTable::onCmdMoveRight),
88  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MOVE_UP, MFXEditableTable::onCmdMoveUp),
89  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MOVE_DOWN, MFXEditableTable::onCmdMoveDown),
90  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MOVE_HOME, MFXEditableTable::onCmdMoveHome),
91  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MOVE_END, MFXEditableTable::onCmdMoveEnd),
92  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MOVE_TOP, MFXEditableTable::onCmdMoveTop),
93  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MOVE_BOTTOM, MFXEditableTable::onCmdMoveBottom),
94  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MOVE_PAGEDOWN, MFXEditableTable::onCmdMovePageDown),
95  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MOVE_PAGEUP, MFXEditableTable::onCmdMovePageUp),
96 
97  FXMAPFUNC(SEL_COMMAND, FXTable::ID_SELECT_ROW_INDEX, MFXEditableTable::onCmdSelectRowIndex),
98  FXMAPFUNC(SEL_COMMAND, FXTable::ID_SELECT_COLUMN_INDEX, MFXEditableTable::onCmdSelectColumnIndex),
99  FXMAPFUNC(SEL_COMMAND, FXTable::ID_SELECT_COLUMN, MFXEditableTable::onCmdSelectColumn),
100  FXMAPFUNC(SEL_COMMAND, FXTable::ID_SELECT_ROW, MFXEditableTable::onCmdSelectRow),
101  // FXMAPFUNC(SEL_COMMAND,FXTable::ID_SELECT_CELL,MFXEditableTable::onCmdSelectCell),
102  FXMAPFUNC(SEL_COMMAND, FXTable::ID_SELECT_ALL, MFXEditableTable::onCmdSelectAll),
103  FXMAPFUNC(SEL_COMMAND, FXTable::ID_DESELECT_ALL, MFXEditableTable::onCmdDeselectAll),
104  FXMAPFUNC(SEL_COMMAND, FXTable::ID_MARK, MFXEditableTable::onCmdMark),
105  FXMAPFUNC(SEL_COMMAND, FXTable::ID_EXTEND, MFXEditableTable::onCmdExtend),
106 };
107 
108 
109 // Object implementation
110 FXIMPLEMENT(MFXEditableTable, FXTable, MFXEditableTableMap, ARRAYNUMBER(MFXEditableTableMap))
111 
112 
114  FXSelector sel, FXuint opts,
115  FXint x, FXint y, FXint w, FXint h,
116  FXint pl, FXint pr, FXint pt, FXint pb)
117  : FXTable(p, tgt, sel, opts, x, y, w, h, pl, pr, pt, pb),
118  myEditedItem(0) {
119  myEditor =
120  new FXTextField((FXComposite*)getParent(), 1, this,
121  ID_EDITOR, FRAME_NORMAL | LAYOUT_EXPLICIT);
122  myEditor->hide();
123  flags |= FLAG_ENABLED | FLAG_DROPTARGET;
124 }
125 
126 
128 
129 
130 long
131 MFXEditableTable::onLeftBtnPress(FXObject* sender, FXSelector sel, void* ptr) {
132  editEnd();
133  FXTable::onLeftBtnPress(sender, sel, ptr);
134  return 1;
135 }
136 
137 
138 long
139 MFXEditableTable::onLeftBtnClicked(FXObject* , FXSelector , void* ptr) {
140  FXTablePos* e = (FXTablePos*)ptr;
141  int r = e->row;
142  int c = e->col;
143  if (c == -1 || r == -1) {
144  return 1;
145  }
146  killSelection(false);
147  myEditedItem = getItem(r, c);
148  myEditedCol = c;
149  myEditedRow = r;
150  if (c >= 0 && r >= 0) {
152  } else {
153  editEnd();
154  }
155  return 1;
156 }
157 
158 
159 long
160 MFXEditableTable::onLeftBtnRelease(FXObject* sender, FXSelector sel, void* ptr) {
161  FXTable::onLeftBtnRelease(sender, sel, ptr);
162  /* FXEvent* e= (FXEvent*)ptr;
163  if(flgEditTimer) {
164  flgEditTimer = FALSE;
165  if(!e->moved) getApp()->addTimeout(this,ID_EDITTIMER,600);
166  }*/
167  return 1;
168 }
169 
170 
171 void
172 MFXEditableTable::editItem(FXTableItem* item, FXint how) {
173  if (item == 0) {
174  editEnd();
175  return;
176  }
178  editEnd();
179  return;
180  }
181  FXTableItem* it = item;
182  myPreviousText = item->getText();
183  FXint x = getColumnX(myEditedCol) + getRowHeader()->getWidth() + xpos;
184  FXint y = getRowY(myEditedRow) + getColumnHeader()->getHeight() + ypos;
185  FXIcon* icon = item->getIcon();
186  if (icon) {
187  x += icon->getWidth() + 4;
188  }
189  FXint vw = getViewportWidth();
190  if (vertical->shown()) {
191  vw -= vertical->getWidth();
192  }
193  if (vw > getColumnWidth(myEditedCol)) {
194  vw = getColumnWidth(myEditedCol) + x;
195  }
196  myEditor->setText(it->getText());
197  myEditor->move(x, y);
198  myEditor->resize(vw - x + 1, getRowHeight(myEditedRow) + 1);
199  myEditor->show();
200  myEditor->raise();
201  myEditor->setFocus();
202  if (how == 'I') {
203  myEditor->killSelection();
204  myEditor->setCursorPos(0);
205  } else if (how == 'A') {
206  myEditor->killSelection();
207  myEditor->setCursorPos(myEditor->getText().length());
208  } else {
209  myEditor->selectAll();
210  }
211  myEditedItem = it;
212 }
213 
214 
215 void
217  if (!myEditedItem) {
218  return;
219  }
220  FXTableItem* item = myEditedItem;
221  myEditedItem = NULL;
222  myEditor->hide();
223  setFocus();
224  FXString text = myEditor->getText();
225  myEditedItem = 0;
226  if (item->getText() == text) {
227  return;
228  }
229  if (handle(item, FXSEL(SEL_COMMAND, ID_EDITEND), &text)) {
230  item->setText(text);
231  handle(this, FXSEL(SEL_CHANGED, 0), item);
232  }
233  killSelection(true);
234  if (target) {
235  MFXEditedTableItem edited;
236  edited.item = item;
237  edited.row = myEditedRow;
238  edited.col = myEditedCol;
239  if (!target->handle(this, FXSEL(SEL_CHANGED, ID_TEXT_CHANGED), (void*) &edited)) {
240  item->setText(myPreviousText);
241  }
242  }
243 }
244 
245 
246 long
247 MFXEditableTable::onEditEnd(FXObject*, FXSelector , void*) {
248  delete myEditedItem;
249  myEditedItem = 0;
250  return 1;
251 }
252 
253 
254 void
256  if (!myEditedItem) {
257  return;
258  }
259  myEditedItem = 0;
260  myEditor->hide();
261  setFocus();
262  killSelection(true);
263 }
264 
265 
266 long
267 MFXEditableTable::onEditKeyPress(FXObject*, FXSelector, void* ptr) {
268  FXEvent* e = (FXEvent*)ptr;
269  switch (e->code) {
270  case KEY_Escape:
271  editCancel();
272  return 1;
273  case KEY_Return:
274  case KEY_KP_Enter:
275  editEnd();
276 // flgEnter = TRUE;
277 // if(e->state & SHIFTMASK) handle(this, FXSEL(SEL_COMMAND,ID_NEXTLINE), NULL);
278  return 1;
279  case KEY_Up:
280  case KEY_Down:
281 // editEnd();
282  // handle(this, FXSEL(SEL_KEYPRESS,0), ptr);
283  return 1;
284  }
285  return 0;
286 }
287 
288 
289 long
290 MFXEditableTable::onKeyRelease(FXObject* sender, FXSelector sel, void* ptr) {
291  FXint key = ((FXEvent*)ptr)->code;
292  if (/*flgEnter &&*/ key == KEY_Return || key == KEY_KP_Enter) {
293 // flgEnter = FALSE;
294  return 1;
295  }
296 // flgEnter = FALSE;
297  return FXTable::onKeyRelease(sender, sel, ptr);
298 }
299 
300 
301 long
303  editEnd();
304  return 0;
305 }
306 
307 /*
308 long
309 MFXEditableTable::onTipTimer(FXObject* sender, FXSelector sel, void* ptr)
310 {
311  if(myEditedItem) return 0;
312  return FXTable::onTipTimer(sender, sel, ptr);
313 }
314 */
315 
316 long
317 MFXEditableTable::onRightBtnRelease(FXObject* sender, FXSelector sel, void* ptr) {
318  /* if(dragItem) {
319  flags &= ~(FLAG_PRESSED | FLAG_TRYDRAG | FLAG_DODRAG);
320  endDrag(FALSE);
321  setDragCursor(getDefaultCursor());
322  dragItem = NULL;
323  }*/
324  return FXTable::onRightBtnRelease(sender, sel, ptr);
325 }
326 
327 
328 
329 long
330 MFXEditableTable::onHScrollerChanged(FXObject* o, FXSelector s, void* d) {
331  editEnd();
332  return FXScrollArea::onHScrollerChanged(o, s, d);
333 }
334 
335 
336 long
337 MFXEditableTable::onVScrollerChanged(FXObject* o, FXSelector s, void* d) {
338  editEnd();
339  return FXScrollArea::onVScrollerChanged(o, s, d);
340 }
341 
342 
343 long
344 MFXEditableTable::onHScrollerDragged(FXObject* o, FXSelector s, void* d) {
345  editEnd();
346  return FXScrollArea::onHScrollerDragged(o, s, d);
347 }
348 
349 
350 long
351 MFXEditableTable::onVScrollerDragged(FXObject* o, FXSelector s, void* d) {
352  editEnd();
353  return FXScrollArea::onVScrollerDragged(o, s, d);
354 }
355 
356 
357 long
358 MFXEditableTable::onAutoScroll(FXObject* o, FXSelector s, void* d) {
359  editEnd();
360  return FXTable::onAutoScroll(o, s, d);
361 }
362 
363 
364 long
365 MFXEditableTable::onUngrabbed(FXObject* o, FXSelector s, void* d) {
366  editEnd();
367  return FXTable::onUngrabbed(o, s, d);
368 }
369 
370 
371 long
372 MFXEditableTable::onRightBtnPress(FXObject* o, FXSelector s, void* d) {
373  editEnd();
374  return FXTable::onRightBtnPress(o, s, d);
375 }
376 
377 
378 long
379 MFXEditableTable::onTabKeyPress(FXObject* o, FXSelector s, void* d) {
380  editEnd();
381  return FXTable::onKeyPress(o, s, d);
382 }
383 
384 
385 long
386 MFXEditableTable::onTabKeyRelease(FXObject* o, FXSelector s, void* d) {
387  editEnd();
388  return FXTable::onKeyRelease(o, s, d);
389 }
390 
391 
392 long
393 MFXEditableTable::onFocusIn(FXObject* o, FXSelector s, void* d) {
394 // editEnd();
395  return FXTable::onFocusIn(o, s, d);
396 }
397 
398 
399 long
400 MFXEditableTable::onFocusOut(FXObject* o, FXSelector s, void* d) {
401 // editEnd();
402  return FXTable::onFocusOut(o, s, d);
403 }
404 
405 
406 long
407 MFXEditableTable::onSelectionLost(FXObject* o, FXSelector s, void* d) {
408 // editEnd();
409  return FXTable::onSelectionLost(o, s, d);
410 }
411 
412 
413 long
414 MFXEditableTable::onSelectionGained(FXObject* o, FXSelector s, void* d) {
415 // editEnd();
416  return FXTable::onSelectionGained(o, s, d);
417 }
418 
419 
420 long
421 MFXEditableTable::onSelectionRequest(FXObject* o, FXSelector s, void* d) {
422 // editEnd();
423  return FXTable::onSelectionRequest(o, s, d);
424 }
425 
426 
427 long
428 MFXEditableTable::onClipboardLost(FXObject* o, FXSelector s, void* d) {
429  editEnd();
430  return FXTable::onClipboardLost(o, s, d);
431 }
432 
433 
434 long
435 MFXEditableTable::onClipboardGained(FXObject* o, FXSelector s, void* d) {
436  editEnd();
437  return FXTable::onClipboardGained(o, s, d);
438 }
439 
440 
441 long
442 MFXEditableTable::onClipboardRequest(FXObject* o, FXSelector s, void* d) {
443  editEnd();
444  return FXTable::onClipboardRequest(o, s, d);
445 }
446 
447 
448 long
450  editEnd();
451  return 1;
452 // return FXTable::onUngrabbed(o, s, d);
453 }
454 
455 
456 long
458  editEnd();
459  return 1;
460 // return FXTable::onUngrabbed(o, s, d);
461 }
462 
463 
464 long
465 MFXEditableTable::onCommand(FXObject* o, FXSelector s, void* d) {
466  editEnd();
467  return FXTable::onCommand(o, s, d);
468 }
469 
470 
471 long
472 MFXEditableTable::onUpdHorzGrid(FXObject* o, FXSelector s, void* d) {
473  editEnd();
474  return FXTable::onUpdHorzGrid(o, s, d);
475 }
476 
477 
478 long
479 MFXEditableTable::onUpdVertGrid(FXObject* o, FXSelector s, void* d) {
480  editEnd();
481  return FXTable::onUpdVertGrid(o, s, d);
482 }
483 
484 
485 long
486 MFXEditableTable::onCmdHorzGrid(FXObject* o, FXSelector s, void* d) {
487  editEnd();
488  return FXTable::onCmdHorzGrid(o, s, d);
489 }
490 
491 
492 long
493 MFXEditableTable::onCmdVertGrid(FXObject* o, FXSelector s, void* d) {
494  editEnd();
495  return FXTable::onCmdVertGrid(o, s, d);
496 }
497 
498 
499 long
501  editEnd();
502  return 1;
503 // return FXTable::onUngrabbed(o, s, d);
504 }
505 
506 
507 long
509  editEnd();
510  return 1;
511 // return FXTable::onUngrabbed(o, s, d);
512 }
513 
514 
515 long
517  editEnd();
518  return 1;
519 // return FXTable::onUngrabbed(o, s, d);
520 }
521 
522 
523 long
525  editEnd();
526  return 1;
527 // return FXTable::onUngrabbed(o, s, d);
528 }
529 
530 
531 long
533  editEnd();
534  return 1;
535 // return FXTable::onUngrabbed(o, s, d);
536 }
537 
538 
539 long
541  editEnd();
542  return 1;
543 // return FXTable::onUngrabbed(o, s, d);
544 }
545 
546 
547 
548 long
549 MFXEditableTable::onCmdMoveLeft(FXObject* o, FXSelector s, void* d) {
550  editEnd();
551  return FXTable::onCmdMoveLeft(o, s, d);
552 }
553 
554 
555 long
556 MFXEditableTable::onCmdMoveRight(FXObject* o, FXSelector s, void* d) {
557  editEnd();
558  return FXTable::onCmdMoveRight(o, s, d);
559 }
560 
561 
562 long
563 MFXEditableTable::onCmdMoveUp(FXObject* o, FXSelector s, void* d) {
564  editEnd();
565  return FXTable::onCmdMoveUp(o, s, d);
566 }
567 
568 
569 long
570 MFXEditableTable::onCmdMoveDown(FXObject* o, FXSelector s, void* d) {
571  editEnd();
572  return FXTable::onCmdMoveDown(o, s, d);
573 }
574 
575 
576 long
577 MFXEditableTable::onCmdMoveHome(FXObject* o, FXSelector s, void* d) {
578  editEnd();
579  return FXTable::onCmdMoveHome(o, s, d);
580 }
581 
582 
583 long
584 MFXEditableTable::onCmdMoveEnd(FXObject* o, FXSelector s, void* d) {
585  editEnd();
586  return FXTable::onCmdMoveEnd(o, s, d);
587 }
588 
589 
590 long
591 MFXEditableTable::onCmdMoveTop(FXObject* o, FXSelector s, void* d) {
592  editEnd();
593  return FXTable::onCmdMoveTop(o, s, d);
594 }
595 
596 
597 long
598 MFXEditableTable::onCmdMoveBottom(FXObject* o, FXSelector s, void* d) {
599  editEnd();
600  return FXTable::onCmdMoveBottom(o, s, d);
601 }
602 
603 
604 long
605 MFXEditableTable::onCmdMovePageDown(FXObject* o, FXSelector s, void* d) {
606  editEnd();
607  return FXTable::onCmdMovePageDown(o, s, d);
608 }
609 
610 
611 long
612 MFXEditableTable::onCmdMovePageUp(FXObject* o, FXSelector s, void* d) {
613  editEnd();
614  return FXTable::onCmdMovePageUp(o, s, d);
615 }
616 
617 
618 
619 long
621  editEnd();
622  return FXTable::onCmdSelectRowIndex(o, s, d);
623 }
624 
625 
626 long
628  editEnd();
629  return 1;
630 // return FXTable::onUngrabbed(o, s, d);
631 }
632 
633 
634 long
636  editEnd();
637  return 1;
638 // return FXTable::onUngrabbed(o, s, d);
639 }
640 
641 
642 long
643 MFXEditableTable::onCmdSelectRow(FXObject* o, FXSelector s, void* d) {
644  editEnd();
645  return FXTable::onCmdSelectRow(o, s, d);
646 }
647 
648 
649 long
651 // editEnd();
652  return 1;
653 // return FXTable::onUngrabbed(o, s, d);
654 }
655 
656 
657 long
659  editEnd();
660  return 1;
661 // return FXTable::onUngrabbed(o, s, d);
662 }
663 
664 
665 long
667  editEnd();
668  return 1;
669 // return FXTable::onUngrabbed(o, s, d);
670 }
671 
672 
673 long
674 MFXEditableTable::onCmdMark(FXObject* o, FXSelector s, void* d) {
675  editEnd();
676  return FXTable::onCmdMark(o, s, d);
677 }
678 
679 
680 long
681 MFXEditableTable::onCmdExtend(FXObject* o, FXSelector s, void* d) {
682  editEnd();
683  return FXTable::onCmdExtend(o, s, d);
684 }
685 
686 
687 void
689  if (val) {
690  myWriteProtectedCols.insert(col);
691  } else {
692  std::set<int>::iterator i = myWriteProtectedCols.find(col);
693  if (i != myWriteProtectedCols.end()) {
694  myWriteProtectedCols.erase(i);
695  }
696  }
697 }
698 
699 
700 
701 /****************************************************************************/
702