home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / fdlg.zip / FDLG_SET.cls < prev    next >
Text File  |  1996-02-02  |  10KB  |  400 lines

  1. "  ---- Ronald Brill 1995, 1996 ---- "
  2. "  ---- Extended File Dialogs Version 2.1 ---- "
  3.  
  4.  
  5. Object subclass: #FileDialogSetup
  6.  
  7. instanceVariableNames: '
  8.    defaultDirectory
  9.    directoryList
  10.    directoryListExtend
  11.    directoryListLabels
  12.    fileList
  13.    fileLoadMenu
  14.    fileReloadMenu
  15.    filterLabels
  16.    filterValues
  17.    filterMapping
  18.    fullPath
  19.    previewFont
  20.    setup
  21.    reorderFileList
  22.  
  23. '
  24.  
  25. classVariableNames: '
  26.    theOneInstance
  27. '
  28.  
  29. poolDictionaries: ''
  30. !
  31.  
  32.  
  33. !FileDialogSetup class methods !
  34.  
  35.  
  36. fileName
  37.    ^ 'enf_loc.ini'
  38. !"end fileName"
  39.  
  40.  
  41. initialize
  42.    self load.
  43. !"end initialize"
  44.  
  45.  
  46. load
  47.    theOneInstance ~~ nil
  48.    ifTrue:
  49.    [  ^ theOneInstance.
  50.    ].
  51.    theOneInstance := super new.
  52.    ('ExtendedFileDialog: restore settings from' ++ (Setup locate: self fileName)) out.
  53.    theOneInstance varAt: #setup put: (Setup file: self fileName part: #Remember).
  54.    theOneInstance initialize.
  55.    ^ theOneInstance.
  56. !"end load"
  57.  
  58.  
  59. !"End of class methods block"
  60.  
  61.  
  62. !FileDialogSetup methods !
  63.  
  64.  
  65. addFile: aFileName
  66. | temp length labels |
  67.    fileList == nil ifTrue: [ ^ self ].
  68.  
  69.    (WPENFIN controllerItemDict at: #menuDesktop) enableAt: 4.
  70.    (WPENFIN controllerItemDict at: #menuDesktop) enableAt: 5.
  71.    temp := fileList indexOf: aFileName.
  72.    reorderFileList
  73.    ifTrue:
  74.    [  temp > 0 ifTrue: [ fileList removeAt: temp. ].
  75.       fileList size > 9 ifTrue: [ fileList removeAt: 10. ].
  76.       fileList := (Array with: aFileName) concat: fileList.
  77.    ]
  78.    ifFalse:
  79.    [  temp > 0 ifTrue: [ ^ self ].
  80.       fileList size > 10 ifTrue: [ fileList removeAt: 1. ].
  81.       fileList := fileList add: aFileName.
  82.    ].
  83.    labels := fileList collect:   [  :each|
  84.                                     length := each size + 4 max: 12.
  85.                                     [  each := ((FileNameString newString: each asString) abbreviate: length) asText.
  86.                                        length := length -1.
  87.                                     ]
  88.                                     doUntil:
  89.                                     [  each getTextExtent x < 1000 ].
  90.                                        each := each asString.
  91.                                     ].
  92.  
  93.    fileLoadMenu putValues: fileList.
  94.    fileReloadMenu putValues: fileList.
  95.    fileLoadMenu putLabels: labels.
  96.    fileReloadMenu putLabels: labels.
  97. !"end addFile:"
  98.  
  99.  
  100. createDirectoryListLabels
  101. | pos length |
  102.    directoryListLabels := directoryList
  103.       collect:
  104.       [  :each|
  105.          fullPath
  106.          ifFalse:
  107.          [  length := each size + 4 max: 12.
  108.             [  each := ((FileNameString newString: each asString) abbreviate: length) asText.
  109.                length := length -1.
  110.             ]
  111.             doUntil:
  112.             [  each getTextExtent x < directoryListExtend ].
  113.          ].
  114.          each asText.
  115.       ].
  116.    pos := directoryList indexOf: defaultDirectory.
  117.    pos > 0
  118.    ifTrue:
  119.    [  directoryListLabels at: pos put: ((directoryListLabels at: pos) asTextOptions: {#Bold}).
  120.    ].
  121. !"end createDirectoryListLabels"
  122.  
  123.  
  124. createMenus
  125. | desktopMenu stream result |
  126.    Application ~~ WPENFIN ifTrue: [ ^ self ].
  127.  
  128.    desktopMenu := (WPENFIN controllerItemDict at: #menuDesktop).
  129. "  ---- load menu ---- "
  130.    fileLoadMenu
  131.          := WPENFIN  add:        #rbrisLoadMenu
  132.                      class:      FormSubMenu
  133.                      position:   0
  134.                      options:    nil
  135.                      form:       WPENFIN mainForm
  136.                      text:       '~Load file'.
  137.    fileLoadMenu setInitialValueTo: { #'No file'}.
  138.    fileLoadMenu initialize.
  139.    fileLoadMenu formItem open.
  140.    desktopMenu insertSubMenu: fileLoadMenu at: 4.
  141.    desktopMenu disableAt: 4.
  142.  
  143.    WPENFIN actionDict at: #rbrisLoadMenu put:
  144.          [  stream := FileStream file: (WPENFIN controllerItemDict at: #rbrisLoadMenu) getValue.
  145.             result := stream asClassMethodsInit: false.
  146.             result isClass ifFalse: [ ^ self. ].
  147.             ('load:' ++ stream fileName) out.
  148.             (result class methodDictionary includesKey: #initialize)
  149.             ifTrue:
  150.             [  result initialize.
  151.                result class methodDictionary removeAt: #initialize.
  152.             ].
  153.             self addFile: stream fileName.
  154.          ].
  155.  
  156.  
  157. "  ---- reload menu ---- "
  158.    fileReloadMenu
  159.          := WPENFIN  add:        #rbrisReloadMenu
  160.                      class:      FormSubMenu
  161.                      position:   0
  162.                      options:    nil
  163.                      form:       WPENFIN mainForm
  164.                      text:       '~Reload file'.
  165.    fileReloadMenu setInitialValueTo: { #'No file'}.
  166.    fileReloadMenu initialize.
  167.    fileReloadMenu formItem open.
  168.    desktopMenu insertSubMenu: fileReloadMenu at: 5.
  169.    desktopMenu disableAt: 5.
  170.  
  171.    WPENFIN actionDict at: #rbrisReloadMenu put:
  172.          [  stream := FileStream file: (WPENFIN controllerItemDict at: #rbrisReloadMenu) getValue.
  173.             ('reload:' ++ stream fileName) out.
  174.             stream reloadClass.
  175.             self addFile: stream fileName.
  176.          ].
  177.    fileList := Array new.
  178. !"end createMenus"
  179.  
  180.  
  181. defaultDirectory
  182.    ^ defaultDirectory.
  183. !"end defaultDirectory"
  184.  
  185.  
  186. defaultDirectory: aString
  187.    defaultDirectory := aString deepCopy.
  188.    setup at: #DefaultDir put: defaultDirectory.
  189.    self createDirectoryListLabels.
  190. !"end defaultDirectory:"
  191.  
  192.  
  193. directoryList
  194.    ^ directoryList.
  195. !"end directoryList"
  196.  
  197.  
  198. directoryList: aArray
  199.    directoryList := aArray deepCopy.
  200.    setup at: #Dirs put: directoryList.
  201. !"end directoryList:"
  202.  
  203.  
  204. directoryListExtend: extend
  205.    directoryListExtend := extend - 64.
  206. !"end directoryListExtend:"
  207.  
  208.  
  209. directoryListLabels
  210.    directoryListLabels == nil
  211.    ifTrue:
  212.    [  self createDirectoryListLabels.
  213.    ].
  214.    ^ directoryListLabels.
  215. !"end directoryListLabels"
  216.  
  217.  
  218. fileList
  219.    ^ fileList.
  220. !"end fileList"
  221.  
  222.  
  223. filterLabels
  224.    ^ filterLabels.
  225. !"end filterLabels"
  226.  
  227.  
  228. filterValues
  229.    ^ filterValues.
  230. !"end filterValues"
  231.  
  232.  
  233. filterLabels: aArray
  234.    filterLabels := aArray deepCopy.
  235.    setup at: #FilterLabels put: filterLabels.
  236. !"end filterLabels:"
  237.  
  238. filterValues: aArray
  239.    filterValues := aArray deepCopy.
  240.    setup at: #FilterValues put: filterValues.
  241. !"end filterValues:"
  242.  
  243.  
  244. filterMapping
  245.    ^ filterMapping.
  246. !"end filterMapping"
  247.  
  248.  
  249. filterMapping: aString
  250.    filterMapping := aString deepCopy.
  251.    setup at: #FilterMapping put: filterMapping.
  252. !"end filterMapping:"
  253.  
  254.  
  255. fullPath
  256.    ^ fullPath.
  257. !"end fullPath"
  258.  
  259.  
  260. fullPath: aBoolean
  261.    fullPath := aBoolean.
  262.    self createDirectoryListLabels.
  263. !"end fullPath:"
  264.  
  265.  
  266. initialize
  267.    defaultDirectory := (setup values at: #DefaultDir) deepCopy.
  268.    defaultDirectory isString
  269.    ifFalse:
  270.    [  defaultDirectory := String new.
  271.    ].
  272.    defaultDirectory isEmpty
  273.    ifFalse:
  274.    [  LoadClassDirectory := defaultDirectory deepCopy.
  275.    ].
  276.  
  277.    directoryList := (setup values at: #Dirs) deepCopy.
  278.    directoryList isArray
  279.    ifFalse:
  280.    [  directoryList := Array new.
  281.    ].
  282.  
  283.    fullPath := false.
  284.  
  285.    " ---- Filter ---- "
  286.    filterLabels := (setup values at: #FilterLabels) deepCopy.
  287.    filterLabels isArray
  288.    ifFalse:
  289.    [  filterLabels := {#'<All Files>' #'Class Files (*.cls)'}.
  290.    ].
  291.    filterValues := (setup values at: #FilterValues) deepCopy.
  292.    filterValues isArray
  293.    ifFalse:
  294.    [  filterValues := {#'*.*' #'*.cls'}.
  295.    ].
  296.    filterMapping := (setup values at: #FilterMapping) deepCopy.
  297.    filterMapping isString
  298.    ifFalse:
  299.    [  filterMapping := '*.cls'.
  300.    ].
  301.  
  302.    " ---- PreviewFont ---- "
  303.    previewFont := setup values at: #PreviewFont.
  304.    previewFont isArray
  305.    ifTrue:
  306.    [  previewFont := {#Top #Left} deepCopy concat: previewFont.
  307.    ]
  308.    ifFalse:
  309.    [  previewFont := {#Top #Left {#FontFace #'System VIO'} {#PointSize 5}}.
  310.    ].
  311.  
  312.    " ---- Options ---- "
  313.    reorderFileList := setup values at: #ReorderFileList.
  314.    reorderFileList isBoolean
  315.    ifFalse:
  316.    [  reorderFileList := true.
  317.    ].
  318. !"end initialize"
  319.  
  320.  
  321. permanentDefaultDirectory: aString
  322.    self defaultDirectory: aString;
  323.         save.
  324. !"end permanentDefaultDirectory:"
  325.  
  326.  
  327. permanentDirectoryList: aArray
  328.    self directoryList: aArray;
  329.         save.
  330. !"end permanentDirectoryList:"
  331.  
  332.  
  333. permanentDirectoryListAdd: aDirectory
  334.    (directoryList includes: aDirectory) ifTrue: [ ^ self.].
  335.    self permanentDirectoryList: (directoryList add: aDirectory).
  336.    self createDirectoryListLabels.
  337. !"end permanentDirectoryListAdd:"
  338.  
  339.  
  340. permanentDirectoryMoveFrom: fromIndex to: toIndex
  341. | tempValue |
  342.    tempValue := directoryList at: fromIndex.
  343.    fromIndex > toIndex
  344.    ifTrue:
  345.    [  directoryList removeAt: fromIndex.
  346.       directoryList at: toIndex insert: tempValue.
  347.    ]
  348.    ifFalse:
  349.    [  directoryList at: toIndex insert: tempValue.
  350.       directoryList removeAt: fromIndex.
  351.    ].
  352.    self save.
  353.    self createDirectoryListLabels.
  354. !"end permanentDirectoryMoveFrom:to:"
  355.  
  356.  
  357. permanentDirectoryListRemoveAt: aSmallInt
  358.    (directoryList at: aSmallInt) = defaultDirectory
  359.    ifTrue:
  360.    [  self defaultDirectory: ''.
  361.    ].
  362.    self permanentDirectoryList: (directoryList removeAt: aSmallInt).
  363.    self createDirectoryListLabels.
  364. !"end permanentDirectoryListRemoveAt:"
  365.  
  366.  
  367. permanentSortDirectoryList
  368.    self permanentDirectoryList: directoryList sort.
  369.    self createDirectoryListLabels.
  370. !"end permanentSortDirectoryList"
  371.  
  372.  
  373. previewFont
  374.    ^ previewFont.
  375. !"end previewFont"
  376.  
  377.  
  378. previewFont: aArray
  379.    previewFont := aArray.
  380.    setup at: #PreviewFont put: previewFont.
  381. !"end previewFont:"
  382.  
  383.  
  384. save
  385.    ^ setup save.
  386. !"end save"
  387.  
  388. reorderFileList
  389.    ^ reorderFileList.
  390. !"end reorderFileList"
  391.  
  392.  
  393. reorderFileList: aBoolean
  394.    reorderFileList := aBoolean.
  395.    setup at: #ReorderFileList put: reorderFileList.
  396. !"end reorderFileList"
  397.  
  398.  
  399. !"End of method block"
  400.