001 /* 002 * OperationProcessor 003 * 004 * Copyright (c) 2000, 2001, 2002, 2003, 2004 Marco Schmidt. 005 * All rights reserved. 006 */ 007 008 package net.sourceforge.jiu.apps; 009 010 import net.sourceforge.jiu.data.BilevelImage; 011 import net.sourceforge.jiu.data.Gray16Image; 012 import net.sourceforge.jiu.data.Gray8Image; 013 import net.sourceforge.jiu.data.Paletted8Image; 014 import net.sourceforge.jiu.data.PixelImage; 015 import net.sourceforge.jiu.data.RGB24Image; 016 import net.sourceforge.jiu.data.RGB48Image; 017 018 /** 019 * Abstract base class for performing JIU operations in combination 020 * with an {@link EditorState}. 021 * @author Marco Schmidt 022 */ 023 public abstract class OperationProcessor implements MenuIndexConstants 024 { 025 private EditorState state; 026 027 /** 028 * Create an object of this class, storing the state argument for later use. 029 * @param editorState EditorState object to be used for processing 030 */ 031 public OperationProcessor(EditorState editorState) 032 { 033 state = editorState; 034 } 035 036 /** 037 * Adjust the brightness of the current image. 038 */ 039 public abstract void colorAdjustBrightness(); 040 041 /** 042 * Adjust the contrast of the current image. 043 */ 044 public abstract void colorAdjustContrast(); 045 046 /** 047 * Adjust the gamma value of the current image. 048 */ 049 public abstract void colorAdjustGamma(); 050 051 /** 052 * Adjust hue, saturation and value of the current image. 053 */ 054 public abstract void colorAdjustHueSaturationValue(); 055 056 /** 057 * Count the number of colors used in the current image. 058 */ 059 public abstract void colorHistogramCountColorsUsed(); 060 061 public abstract void colorHistogramEqualize(); 062 063 public abstract void colorHistogramNormalize(); 064 065 public abstract void colorHistogramTextureProperties(); 066 067 public abstract void colorHistogramSaveHistogramAs(); 068 069 public abstract void colorHistogramSaveCoOccurrenceMatrixAs(); 070 071 public abstract void colorHistogramSaveCoOccurrenceFrequencyMatrixAs(); 072 073 public abstract void colorPaletteSaveAs(); 074 075 public abstract void colorPromotePromoteToPaletted(); 076 077 public abstract void colorPromotePromoteToGray8(); 078 079 public abstract void colorPromotePromoteToGray16(); 080 081 public abstract void colorPromotePromoteToRgb24(); 082 083 public abstract void colorPromotePromoteToRgb48(); 084 085 public abstract void colorReduceReduceNumberOfShadesOfGray(); 086 087 public abstract void colorReduceConvertToGrayscale(); 088 089 public abstract void colorReduceMedianCut(); 090 091 public abstract void colorReduceOctree(); 092 093 public abstract void colorReduceReduceToBilevelThreshold(); 094 095 public abstract void colorReduceUniformPalette(); 096 097 public abstract void colorReduceMapToArbitraryPalette(); 098 099 public abstract void colorConvertToMinimumColorType(); 100 101 public abstract void colorInvert(); 102 103 public abstract void editRedo(); 104 105 public abstract void editUndo(); 106 107 public abstract void filtersBlur(); 108 109 public abstract void filtersSharpen(); 110 111 public abstract void filtersEdgeDetection(); 112 113 public abstract void filtersEmboss(); 114 115 public abstract void filtersPsychedelicDistillation(); 116 117 public abstract void filtersLithograph(); 118 119 public abstract void filtersHorizontalSobel(); 120 121 public abstract void filtersVerticalSobel(); 122 123 public abstract void filtersHorizontalPrewitt(); 124 125 public abstract void filtersVerticalPrewitt(); 126 127 public abstract void filtersMaximum(); 128 129 public abstract void filtersMedian(); 130 131 public abstract void filtersMean(); 132 133 public abstract void filtersMinimum(); 134 135 public abstract void filtersOil(); 136 137 public abstract void transformationsFlip(); 138 139 public abstract void transformationsMirror(); 140 141 public abstract void transformationsRotate90Left(); 142 143 public abstract void transformationsRotate90Right(); 144 145 public abstract void transformationsRotate180(); 146 147 public abstract void transformationsCrop(); 148 149 public abstract void transformationsShear(); 150 151 public abstract void transformationsScale(); 152 153 public abstract void viewInterpolationTypeBicubic(); 154 155 public abstract void viewInterpolationTypeBilinear(); 156 157 public abstract void viewInterpolationTypeNearestNeighbor(); 158 159 public abstract void viewZoomIn(); 160 161 public abstract void viewZoomOut(); 162 163 public abstract void viewSetOriginalSize(); 164 165 166 /** 167 * If there is an image loaded in the application, remove the image. 168 */ 169 public abstract void fileClose(); 170 171 /** 172 * Terminate the application. 173 * If changes were not saved, the user should be asked whether these changes 174 * should be discarded. 175 */ 176 public abstract void fileExit(); 177 178 /** 179 * Load an image in the application. 180 */ 181 public abstract void fileOpen(); 182 183 /** 184 * Save the current image as a Windows BMP file. 185 */ 186 public abstract void fileSaveAsBmp(); 187 188 /** 189 * Save the current image as a GIF file. 190 */ 191 public abstract void fileSaveAsGif(); 192 193 /** 194 * Save the current image as a Palm image file. 195 */ 196 public abstract void fileSaveAsPalm(); 197 198 /** 199 * Save the current image as a Portable Bitmap file. 200 */ 201 public abstract void fileSaveAsPbm(); 202 203 /** 204 * Save the current image as a Portable Graymap file. 205 */ 206 public abstract void fileSaveAsPgm(); 207 208 /** 209 * Save the current image as a Portable Network Graphics file. 210 */ 211 public abstract void fileSaveAsPng(); 212 213 /** 214 * Save the current image as a Portable Pixmap file. 215 */ 216 public abstract void fileSaveAsPpm(); 217 218 /** 219 * Save the current image as a Sun Raster file. 220 */ 221 public abstract void fileSaveAsRas(); 222 223 /** 224 * Returns the EditorState object given to this object's constructor. 225 * @return EditorState object used by this processor 226 */ 227 public EditorState getEditorState() 228 { 229 return state; 230 } 231 232 /** 233 * Display information about the application: 234 * name, version, feedback email address, website. 235 */ 236 public abstract void helpAbout(); 237 238 /** 239 * Display information on the system this application 240 * is currently running on. 241 */ 242 public abstract void helpSystemInformation(); 243 244 /** 245 * Returns if the operation given by the menu index (from {@link MenuIndexConstants} 246 * is available regarding the current editor state. 247 * This method is used to update the enabled status of menu items so that 248 * they reflect what can be done in the current state of an application. 249 * Thus, things that cannot be done cannot be chosen in the menu 250 * because they are disabled. 251 * Example: the File | Save as... items are disabled as long as there is no image loaded, 252 * simply because there is nothing to save. 253 * @param menuIndex index of menu item to be checked 254 * @return whether the operation is available (if true, menu item 255 * should be enabled) 256 */ 257 public boolean isAvailable(int menuIndex) 258 { 259 boolean hasImage = state.hasImage(); 260 PixelImage image = state.getImage(); 261 boolean bilevel = hasImage && image instanceof BilevelImage; 262 boolean gray8 = hasImage && image instanceof Gray8Image; 263 boolean gray16 = hasImage && image instanceof Gray16Image; 264 boolean gray = gray8 || gray16; 265 boolean pal8 = hasImage && image instanceof Paletted8Image; 266 boolean rgb24 = hasImage && image instanceof RGB24Image; 267 boolean rgb48 = hasImage && image instanceof RGB48Image; 268 boolean rgb = rgb24 || rgb48; 269 switch(menuIndex) 270 { 271 case(FILE): 272 { 273 return true; 274 } 275 case(FILE_OPEN): 276 { 277 return true; 278 } 279 case(FILE_CLOSE): 280 { 281 return hasImage; 282 } 283 case(FILE_SAVEAS): 284 { 285 return hasImage; 286 } 287 case(FILE_SAVEAS_GIF): 288 { 289 return bilevel || gray8 || pal8; 290 } 291 case(FILE_SAVEAS_PALM): 292 { 293 return bilevel || gray8 || pal8 || rgb24; 294 } 295 case(FILE_SAVEAS_PBM): 296 { 297 return bilevel; 298 } 299 case(FILE_SAVEAS_PGM): 300 { 301 return gray8 || gray16; 302 } 303 case(FILE_SAVEAS_PNG): 304 { 305 return hasImage; 306 } 307 case(FILE_SAVEAS_PPM): 308 { 309 return rgb24 || rgb48; 310 } 311 case(FILE_SAVEAS_SUNRASTER): 312 { 313 return pal8; 314 } 315 case(FILE_SAVEAS_WINDOWSBMP): 316 { 317 return bilevel || gray8 || pal8 || rgb24; 318 } 319 case(FILE_EXIT): 320 { 321 return true; 322 } 323 case(EDIT): 324 { 325 return state.canUndo() || state.canRedo(); 326 } 327 case(EDIT_UNDO): 328 { 329 return state.canUndo(); 330 } 331 case(EDIT_REDO): 332 { 333 return state.canRedo(); 334 } 335 case(COLOR): 336 { 337 return hasImage; 338 } 339 case(COLOR_ADJUST): 340 { 341 return !bilevel; 342 } 343 case(COLOR_ADJUST_BRIGHTNESS): 344 { 345 return gray8 || gray16 || pal8 || rgb24 || rgb48; 346 } 347 case(COLOR_ADJUST_CONTRAST): 348 { 349 return gray8 || gray16 || pal8 || rgb24 || rgb48; 350 } 351 case(COLOR_ADJUST_GAMMA): 352 { 353 return gray8 || gray16 || pal8 || rgb24 || rgb48; 354 } 355 case(COLOR_HISTOGRAM): 356 { 357 return hasImage; 358 } 359 case(COLOR_HISTOGRAM_COUNTCOLORSUSED): 360 { 361 return hasImage; 362 } 363 case(COLOR_HISTOGRAM_EQUALIZE): 364 { 365 return gray8 || pal8 || rgb24 || rgb48; 366 } 367 case(COLOR_HISTOGRAM_NORMALIZE): 368 { 369 return gray8 || pal8 || rgb24 || rgb48; 370 } 371 case(COLOR_HISTOGRAM_TEXTUREPROPERTIES): 372 { 373 return gray8; 374 } 375 case(COLOR_HISTOGRAM_SAVEHISTOGRAMAS): 376 { 377 return hasImage; 378 } 379 case(COLOR_HISTOGRAM_SAVECOOCCURRENCEMATRIXAS): 380 { 381 return pal8 || gray8 || bilevel; 382 } 383 case(COLOR_HISTOGRAM_SAVECOOCCURRENCEFREQUENCYMATRIXAS): 384 { 385 return pal8 || gray8 || bilevel; 386 } 387 case(COLOR_PALETTE): 388 { 389 return pal8; 390 } 391 case(COLOR_PALETTE_SAVEAS): 392 { 393 return pal8; 394 } 395 case(COLOR_PROMOTE): 396 { 397 return !rgb48; 398 } 399 case(COLOR_PROMOTE_PROMOTETOGRAY8): 400 { 401 return bilevel; 402 } 403 case(COLOR_PROMOTE_PROMOTETOGRAY16): 404 { 405 return bilevel || gray8; 406 } 407 case(COLOR_PROMOTE_PROMOTETORGB24): 408 { 409 return bilevel || gray8 || pal8; 410 } 411 case(COLOR_PROMOTE_PROMOTETORGB48): 412 { 413 return bilevel || gray8 || gray16 || pal8 || rgb24; 414 } 415 case(COLOR_PROMOTE_PROMOTETOPALETTED): 416 { 417 return bilevel || gray8; 418 } 419 case(COLOR_ADJUST_HUESATURATIONVALUE): 420 { 421 return pal8 || rgb24; 422 } 423 case(COLOR_REDUCE): 424 { 425 return !bilevel; 426 } 427 case(COLOR_REDUCE_CONVERTTOGRAYSCALE): 428 { 429 return pal8 || rgb; 430 } 431 case(COLOR_REDUCE_REDUCENUMBEROFSHADESOFGRAY): 432 { 433 return gray8 || gray16; 434 } 435 case(COLOR_REDUCE_REDUCETOBILEVELTHRESHOLD): 436 { 437 return gray8 || gray16; 438 } 439 case(COLOR_REDUCE_MEDIANCUT): 440 { 441 return rgb24; 442 } 443 case(COLOR_REDUCE_OCTREE): 444 { 445 return rgb24; 446 } 447 case(COLOR_REDUCE_UNIFORMPALETTE): 448 { 449 return rgb24; 450 } 451 case(COLOR_REDUCE_MAPTOARBITRARYPALETTE): 452 { 453 return rgb24; 454 } 455 case(COLOR_INVERT): 456 { 457 return hasImage; 458 } 459 case(COLOR_CONVERTTOMINIMUMCOLORTYPE): 460 { 461 return !bilevel; 462 } 463 case(TRANSFORMATIONS): 464 { 465 return hasImage; 466 } 467 case(TRANSFORMATIONS_FLIP): 468 { 469 return hasImage; 470 } 471 case(TRANSFORMATIONS_MIRROR): 472 { 473 return hasImage; 474 } 475 case(TRANSFORMATIONS_ROTATELEFT90): 476 { 477 return hasImage; 478 } 479 case(TRANSFORMATIONS_ROTATERIGHT90): 480 { 481 return hasImage; 482 } 483 case(TRANSFORMATIONS_ROTATE180): 484 { 485 return hasImage; 486 } 487 case(TRANSFORMATIONS_SHEAR): 488 { 489 return hasImage; 490 } 491 case(TRANSFORMATIONS_SCALE): 492 { 493 return hasImage; 494 } 495 case(TRANSFORMATIONS_CROP): 496 { 497 return hasImage; 498 } 499 case(FILTERS): 500 { 501 return hasImage && !pal8; 502 } 503 case(FILTERS_BLUR): 504 case(FILTERS_SHARPEN): 505 case(FILTERS_EDGEDETECTION): 506 case(FILTERS_EMBOSS): 507 case(FILTERS_PSYCHEDELICDISTILLATION): 508 case(FILTERS_LITHOGRAPH): 509 case(FILTERS_HORIZONTALSOBEL): 510 case(FILTERS_VERTICALSOBEL): 511 case(FILTERS_HORIZONTALPREWITT): 512 case(FILTERS_VERTICALPREWITT): 513 case(FILTERS_MEAN): 514 case(FILTERS_OIL): 515 { 516 return gray16 || gray8 || rgb24 || rgb48; 517 } 518 case(FILTERS_MAXIMUM): 519 case(FILTERS_MINIMUM): 520 case(FILTERS_MEDIAN): 521 { 522 return gray16 || gray8 || rgb24 || bilevel || rgb48; 523 } 524 case(VIEW): 525 case(VIEW_INTERPOLATIONTYPE): 526 case(VIEW_INTERPOLATIONTYPE_NEARESTNEIGHBOR): 527 case(VIEW_INTERPOLATIONTYPE_BILINEAR): 528 case(VIEW_INTERPOLATIONTYPE_BICUBIC): 529 { 530 return hasImage; 531 } 532 case(VIEW_SETORIGINALSIZE): 533 { 534 return hasImage && !state.isZoomOriginalSize(); 535 } 536 case(VIEW_ZOOMIN): 537 { 538 return hasImage && !state.isMaximumZoom(); 539 } 540 case(VIEW_ZOOMOUT): 541 { 542 return hasImage && !state.isMinimumZoom(); 543 } 544 case(HELP): 545 { 546 return true; 547 } 548 case(HELP_ABOUT): 549 { 550 return true; 551 } 552 case(HELP_SYSTEMINFORMATION): 553 { 554 return true; 555 } 556 default: 557 { 558 throw new IllegalArgumentException("Not a valid menu index: " + menuIndex); 559 } 560 } 561 } 562 563 public void process(int menuIndex) 564 { 565 switch (menuIndex) 566 { 567 case(FILE_OPEN): 568 { 569 fileOpen(); 570 break; 571 } 572 case(FILE_SAVEAS_GIF): 573 { 574 fileSaveAsGif(); 575 break; 576 } 577 case(FILE_SAVEAS_PALM): 578 { 579 fileSaveAsPalm(); 580 break; 581 } 582 case(FILE_SAVEAS_PBM): 583 { 584 fileSaveAsPbm(); 585 break; 586 } 587 case(FILE_SAVEAS_PGM): 588 { 589 fileSaveAsPgm(); 590 break; 591 } 592 case(FILE_SAVEAS_PNG): 593 { 594 fileSaveAsPng(); 595 break; 596 } 597 case(FILE_SAVEAS_PPM): 598 { 599 fileSaveAsPpm(); 600 break; 601 } 602 case(FILE_SAVEAS_SUNRASTER): 603 { 604 fileSaveAsRas(); 605 break; 606 } 607 case(FILE_SAVEAS_WINDOWSBMP): 608 { 609 fileSaveAsBmp(); 610 break; 611 } 612 case(FILE_CLOSE): 613 { 614 fileClose(); 615 break; 616 } 617 case(FILE_EXIT): 618 { 619 fileExit(); 620 break; 621 } 622 case(EDIT_UNDO): 623 { 624 editUndo(); 625 break; 626 } 627 case(EDIT_REDO): 628 { 629 editRedo(); 630 break; 631 } 632 case(COLOR_ADJUST_BRIGHTNESS): 633 { 634 colorAdjustBrightness(); 635 break; 636 } 637 case(COLOR_ADJUST_CONTRAST): 638 { 639 colorAdjustContrast(); 640 break; 641 } 642 case(COLOR_ADJUST_GAMMA): 643 { 644 colorAdjustGamma(); 645 break; 646 } 647 case(COLOR_ADJUST_HUESATURATIONVALUE): 648 { 649 colorAdjustHueSaturationValue(); 650 break; 651 } 652 case(COLOR_HISTOGRAM_COUNTCOLORSUSED): 653 { 654 colorHistogramCountColorsUsed(); 655 break; 656 } 657 case(COLOR_HISTOGRAM_EQUALIZE): 658 { 659 colorHistogramEqualize(); 660 break; 661 } 662 case(COLOR_HISTOGRAM_NORMALIZE): 663 { 664 colorHistogramNormalize(); 665 break; 666 } 667 case(COLOR_HISTOGRAM_TEXTUREPROPERTIES): 668 { 669 colorHistogramTextureProperties(); 670 break; 671 } 672 case(COLOR_HISTOGRAM_SAVEHISTOGRAMAS): 673 { 674 colorHistogramSaveHistogramAs(); 675 break; 676 } 677 case(COLOR_HISTOGRAM_SAVECOOCCURRENCEMATRIXAS): 678 { 679 colorHistogramSaveCoOccurrenceMatrixAs(); 680 break; 681 } 682 case(COLOR_HISTOGRAM_SAVECOOCCURRENCEFREQUENCYMATRIXAS): 683 { 684 colorHistogramSaveCoOccurrenceFrequencyMatrixAs(); 685 break; 686 } 687 case(COLOR_PALETTE_SAVEAS): 688 { 689 colorPaletteSaveAs(); 690 break; 691 } 692 case(COLOR_PROMOTE_PROMOTETOPALETTED): 693 { 694 colorPromotePromoteToPaletted(); 695 break; 696 } 697 case(COLOR_PROMOTE_PROMOTETOGRAY8): 698 { 699 colorPromotePromoteToGray8(); 700 break; 701 } 702 case(COLOR_PROMOTE_PROMOTETOGRAY16): 703 { 704 colorPromotePromoteToGray16(); 705 break; 706 } 707 case(COLOR_PROMOTE_PROMOTETORGB24): 708 { 709 colorPromotePromoteToRgb24(); 710 break; 711 } 712 case(COLOR_PROMOTE_PROMOTETORGB48): 713 { 714 colorPromotePromoteToRgb48(); 715 break; 716 } 717 case(COLOR_REDUCE_REDUCETOBILEVELTHRESHOLD): 718 { 719 colorReduceReduceToBilevelThreshold(); 720 break; 721 } 722 case(COLOR_REDUCE_REDUCENUMBEROFSHADESOFGRAY): 723 { 724 colorReduceReduceNumberOfShadesOfGray(); 725 break; 726 } 727 case(COLOR_REDUCE_CONVERTTOGRAYSCALE): 728 { 729 colorReduceConvertToGrayscale(); 730 break; 731 } 732 case(COLOR_REDUCE_MEDIANCUT): 733 { 734 colorReduceMedianCut(); 735 break; 736 } 737 case(COLOR_REDUCE_OCTREE): 738 { 739 colorReduceOctree(); 740 break; 741 } 742 case(COLOR_REDUCE_UNIFORMPALETTE): 743 { 744 colorReduceUniformPalette(); 745 break; 746 } 747 case(COLOR_REDUCE_MAPTOARBITRARYPALETTE): 748 { 749 colorReduceMapToArbitraryPalette(); 750 break; 751 } 752 case(COLOR_INVERT): 753 { 754 colorInvert(); 755 break; 756 } 757 case(COLOR_CONVERTTOMINIMUMCOLORTYPE): 758 { 759 colorConvertToMinimumColorType(); 760 break; 761 } 762 case(TRANSFORMATIONS_FLIP): 763 { 764 transformationsFlip(); 765 break; 766 } 767 case(TRANSFORMATIONS_MIRROR): 768 { 769 transformationsMirror(); 770 break; 771 } 772 case(TRANSFORMATIONS_ROTATELEFT90): 773 { 774 transformationsRotate90Left(); 775 break; 776 } 777 case(TRANSFORMATIONS_ROTATERIGHT90): 778 { 779 transformationsRotate90Right(); 780 break; 781 } 782 case(TRANSFORMATIONS_ROTATE180): 783 { 784 transformationsRotate180(); 785 break; 786 } 787 case(TRANSFORMATIONS_CROP): 788 { 789 transformationsCrop(); 790 break; 791 } 792 case(TRANSFORMATIONS_SCALE): 793 { 794 transformationsScale(); 795 break; 796 } 797 case(TRANSFORMATIONS_SHEAR): 798 { 799 transformationsShear(); 800 break; 801 } 802 case(FILTERS_BLUR): 803 { 804 filtersBlur(); 805 break; 806 } 807 case(FILTERS_SHARPEN): 808 { 809 filtersSharpen(); 810 break; 811 } 812 case(FILTERS_EDGEDETECTION): 813 { 814 filtersEdgeDetection(); 815 break; 816 } 817 case(FILTERS_EMBOSS): 818 { 819 filtersEmboss(); 820 break; 821 } 822 case(FILTERS_PSYCHEDELICDISTILLATION): 823 { 824 filtersPsychedelicDistillation(); 825 break; 826 } 827 case(FILTERS_LITHOGRAPH): 828 { 829 filtersLithograph(); 830 break; 831 } 832 case(FILTERS_HORIZONTALSOBEL): 833 { 834 filtersHorizontalSobel(); 835 break; 836 } 837 case(FILTERS_VERTICALSOBEL): 838 { 839 filtersVerticalSobel(); 840 break; 841 } 842 case(FILTERS_HORIZONTALPREWITT): 843 { 844 filtersHorizontalPrewitt(); 845 break; 846 } 847 case(FILTERS_VERTICALPREWITT): 848 { 849 filtersVerticalPrewitt(); 850 break; 851 } 852 case(FILTERS_MINIMUM): 853 { 854 filtersMinimum(); 855 break; 856 } 857 case(FILTERS_MAXIMUM): 858 { 859 filtersMaximum(); 860 break; 861 } 862 case(FILTERS_MEDIAN): 863 { 864 filtersMedian(); 865 break; 866 } 867 case(FILTERS_MEAN): 868 { 869 filtersMean(); 870 break; 871 } 872 case(FILTERS_OIL): 873 { 874 filtersOil(); 875 break; 876 } 877 case(VIEW_ZOOMIN): 878 { 879 viewZoomIn(); 880 break; 881 } 882 case(VIEW_ZOOMOUT): 883 { 884 viewZoomOut(); 885 break; 886 } 887 case(VIEW_SETORIGINALSIZE): 888 { 889 viewSetOriginalSize(); 890 break; 891 } 892 case(VIEW_INTERPOLATIONTYPE_NEARESTNEIGHBOR): 893 { 894 viewInterpolationTypeNearestNeighbor(); 895 break; 896 } 897 case(VIEW_INTERPOLATIONTYPE_BILINEAR): 898 { 899 viewInterpolationTypeBilinear(); 900 break; 901 } 902 case(VIEW_INTERPOLATIONTYPE_BICUBIC): 903 { 904 viewInterpolationTypeBicubic(); 905 break; 906 } 907 case(HELP_ABOUT): 908 { 909 helpAbout(); 910 break; 911 } 912 case(HELP_SYSTEMINFORMATION): 913 { 914 helpSystemInformation(); 915 break; 916 } 917 default: 918 { 919 // error? 920 break; 921 } 922 } 923 } 924 }