FileDialog.st
branchjv
changeset 12818 204da2f7db8e
parent 12431 9f0c59c742d5
child 12819 0ce340e972c4
equal deleted inserted replaced
12808:1b7c88d91de8 12818:204da2f7db8e
    17 		startFilename result filterField filenameField viewFiles
    17 		startFilename result filterField filenameField viewFiles
    18 		filenameLabelHolder isLoadDialog newDirectoryVisibilityHolder
    18 		filenameLabelHolder isLoadDialog newDirectoryVisibilityHolder
    19 		appendButtonVisibleHolder appendWasPressed
    19 		appendButtonVisibleHolder appendWasPressed
    20 		buttonPanelVisibleHolder appendLabelHolder browseVisibleHolder
    20 		buttonPanelVisibleHolder appendLabelHolder browseVisibleHolder
    21 		selectedDeviceDrive listOfDeviceDrives rootDirectoryHolder
    21 		selectedDeviceDrive listOfDeviceDrives rootDirectoryHolder
    22 		initialRoot'
    22 		initialRoot verticalView'
    23 	classVariableNames:'LastExtent'
    23 	classVariableNames:'LastExtent'
    24 	poolDictionaries:''
    24 	poolDictionaries:''
    25 	category:'Interface-Tools-File'
    25 	category:'Interface-Tools-File'
    26 !
    26 !
    27 
    27 
    78 
    78 
    79     fd := FileDialog new.
    79     fd := FileDialog new.
    80     fd multipleSelect:true.
    80     fd multipleSelect:true.
    81     fd open
    81     fd open
    82                                                                 [exEnd]
    82                                                                 [exEnd]
       
    83 
       
    84     Adding custom components:
       
    85                                                                 [exBegin]
       
    86     DialogBox aboutToOpenBoxNotificationSignal handle:[:ex |
       
    87         | fmtBox |
       
    88 
       
    89         fmtBox := ComboListView new.
       
    90         fmtBox list: #('Comma Separated Values (.csv)'
       
    91                         'Microsoft Excel (.xls)'
       
    92                         'Microsoft Excel XML (.xlsx)') .
       
    93         fmtBox model:'Select...' asValue.
       
    94         ex application addComponent: fmtBox.
       
    95         ex proceed.
       
    96     ] do:[
       
    97         Dialog requestFileName: 'Save file as...'
       
    98     ]
       
    99                                                                 [exEnd]
       
   100 
    83 "
   101 "
    84 !
   102 !
    85 
   103 
    86 todo
   104 todo
    87 "
   105 "
   743         window: 
   761         window: 
   744        (WindowSpec
   762        (WindowSpec
   745           label: 'FileDialog'
   763           label: 'FileDialog'
   746           name: 'FileDialog'
   764           name: 'FileDialog'
   747           min: (Point 10 10)
   765           min: (Point 10 10)
   748           bounds: (Rectangle 0 0 407 400)
   766           bounds: (Rectangle 0 0 400 400)
   749           menu: mainMenu
   767           menu: mainMenu
   750           performer: treeBrowser
   768           performer: treeBrowser
   751         )
   769         )
   752         component: 
   770         component: 
   753        (SpecCollection
   771        (SpecCollection
   754           collection: (
   772           collection: (
   755            (ViewSpec
   773            (VerticalPanelViewSpec
   756               name: 'FilePart'
   774               name: 'VerticalPanel'
   757               layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 -32 1.0)
   775               layout: (LayoutFrame 0 0 0 0 0 1 -32 1)
       
   776               horizontalLayout: fit
       
   777               verticalLayout: topSpaceFit
       
   778               horizontalSpace: 0
       
   779               verticalSpace: 3
       
   780               elementsChangeSize: true
   758               component: 
   781               component: 
   759              (SpecCollection
   782              (SpecCollection
   760                 collection: (
   783                 collection: (
   761                  (MenuPanelSpec
   784                  (ViewSpec
   762                     name: 'ToolBar1'
   785                     name: 'FilePart'
   763                     layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 40 0)
       
   764                     tabable: true
       
   765                     menu: toolBarMenu
       
   766                     textDefault: true
       
   767                   )
       
   768                  (VariableHorizontalPanelSpec
       
   769                     name: 'DeviceAndFilterPanel'
       
   770                     layout: (LayoutFrame 0 0 40 0 0 1 70 0)
       
   771                     level: 1
       
   772                     showHandle: true
       
   773                     component: 
   786                     component: 
   774                    (SpecCollection
   787                    (SpecCollection
   775                       collection: (
   788                       collection: (
   776                        (ViewSpec
   789                        (MenuPanelSpec
   777                           name: 'Box1'
   790                           name: 'ToolBar1'
       
   791                           layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 40 0)
       
   792                           tabable: true
       
   793                           menu: toolBarMenu
       
   794                           textDefault: true
       
   795                         )
       
   796                        (VariableHorizontalPanelSpec
       
   797                           name: 'DeviceAndFilterPanel'
       
   798                           layout: (LayoutFrame 0 0 40 0 0 1 70 0)
       
   799                           level: 1
       
   800                           showHandle: true
   778                           component: 
   801                           component: 
   779                          (SpecCollection
   802                          (SpecCollection
   780                             collection: (
   803                             collection: (
   781                              (ComboListSpec
   804                              (ViewSpec
   782                                 name: 'ComboList1'
   805                                 name: 'Box1'
   783                                 layout: (LayoutFrame 1 0 1 0.0 -1 1 -1 1)
   806                                 component: 
   784                                 visibilityChannel: driveSelectorVisible
   807                                (SpecCollection
   785                                 model: selectedDeviceDrive
   808                                   collection: (
   786                                 comboList: listOfDeviceDrives
   809                                    (ComboListSpec
   787                                 useIndex: false
   810                                       name: 'ComboList1'
   788                                 hidePullDownMenuButton: false
   811                                       layout: (LayoutFrame 1 0 1 0.0 -1 1 -1 1)
       
   812                                       visibilityChannel: driveSelectorVisible
       
   813                                       model: selectedDeviceDrive
       
   814                                       comboList: listOfDeviceDrives
       
   815                                       useIndex: false
       
   816                                       hidePullDownMenuButton: false
       
   817                                     )
       
   818                                    )
       
   819                                  
       
   820                                 )
       
   821                               )
       
   822                              (ViewSpec
       
   823                                 name: 'Box2'
       
   824                                 component: 
       
   825                                (SpecCollection
       
   826                                   collection: (
       
   827                                    (LabelSpec
       
   828                                       label: 'Filter:'
       
   829                                       name: 'FilterLabel'
       
   830                                       layout: (LayoutFrame 1 0 2 0 59 0 -2 1)
       
   831                                       translateLabel: true
       
   832                                       adjust: right
       
   833                                     )
       
   834                                    (InputFieldSpec
       
   835                                       name: 'FilterEntryField'
       
   836                                       layout: (LayoutFrame 60 0 -27 1 -2 1 -2 1)
       
   837                                       model: filterHolder
       
   838                                       immediateAccept: true
       
   839                                       acceptOnReturn: true
       
   840                                       acceptOnTab: true
       
   841                                       acceptOnLostFocus: true
       
   842                                       acceptOnPointerLeave: false
       
   843                                       postBuildCallback: postBuildFilterField:
       
   844                                     )
       
   845                                    )
       
   846                                  
       
   847                                 )
   789                               )
   848                               )
   790                              )
   849                              )
   791                            
   850                            
   792                           )
   851                           )
       
   852                           handles: (Any 0.2972972972973 1.0)
   793                         )
   853                         )
   794                        (ViewSpec
   854                        (SubCanvasSpec
   795                           name: 'Box2'
   855                           name: 'DirectoryTreeBrowser'
   796                           component: 
   856                           layout: (LayoutFrame 0 0.0 70 0 0 1.0 -30 1)
   797                          (SpecCollection
   857                           tabable: true
   798                             collection: (
   858                           hasHorizontalScrollBar: false
   799                              (LabelSpec
   859                           hasVerticalScrollBar: false
   800                                 label: 'Filter:'
   860                           majorKey: DirectoryTreeBrowser
   801                                 name: 'FilterLabel'
   861                           subAspectHolders: 
   802                                 layout: (LayoutFrame 1 0 2 0 59 0 -2 1)
   862                          (Array
   803                                 translateLabel: true
   863                             
   804                                 adjust: right
   864                            (SubChannelInfoSpec
   805                               )
   865                               subAspect: filterModel
   806                              (InputFieldSpec
   866                               aspect: filterHolder
   807                                 name: 'FilterEntryField'
   867                             ) 
   808                                 layout: (LayoutFrame 60 0 -27 1 -2 1 -2 1)
   868                            (SubChannelInfoSpec
   809                                 model: filterHolder
   869                               subAspect: rootHolder
   810                                 immediateAccept: true
   870                               aspect: rootDirectoryHolder
   811                                 acceptOnReturn: true
   871                             )
   812                                 acceptOnTab: true
   872                             
   813                                 acceptOnLostFocus: true
   873                            (SubChannelInfoSpec
   814                                 acceptOnPointerLeave: false
   874                               subAspect: showHiddenFiles
   815                                 postBuildCallback: postBuildFilterField:
   875                               aspect: showHiddenFiles
   816                               )
   876                             )
   817                              )
       
   818                            
       
   819                           )
   877                           )
       
   878                           createNewApplication: true
       
   879                           createNewBuilder: true
       
   880                           postBuildCallback: postBuildTreeBrowser:
       
   881                         )
       
   882                        (LabelSpec
       
   883                           label: 'Filename:'
       
   884                           name: 'FilenameLabel'
       
   885                           layout: (LayoutFrame 3 0 -25 1 73 0 -1 1)
       
   886                           translateLabel: true
       
   887                           labelChannel: filenameLabelHolder
       
   888                           adjust: left
       
   889                         )
       
   890                        (FilenameInputFieldSpec
       
   891                           name: 'FilenameEntryField'
       
   892                           layout: (LayoutFrame 70 0 -25 1 -4 1 -1 1)
       
   893                           tabable: true
       
   894                           model: filenameHolder
       
   895                           immediateAccept: false
       
   896                           acceptOnPointerLeave: false
       
   897                           hasKeyboardFocusInitially: true
       
   898                           postBuildCallback: postBuildFileNameField:
   820                         )
   899                         )
   821                        )
   900                        )
   822                      
   901                      
   823                     )
   902                     )
   824                     handles: (Any 0.2972972972973 1.0)
   903                     extent: (Point 400 362)
   825                   )
       
   826                  (SubCanvasSpec
       
   827                     name: 'DirectoryTreeBrowser'
       
   828                     layout: (LayoutFrame 0 0.0 70 0 0 1.0 -30 1)
       
   829                     tabable: true
       
   830                     hasHorizontalScrollBar: false
       
   831                     hasVerticalScrollBar: false
       
   832                     majorKey: DirectoryTreeBrowser
       
   833                     subAspectHolders: 
       
   834                    (Array
       
   835                       
       
   836                      (SubChannelInfoSpec
       
   837                         subAspect: filterModel
       
   838                         aspect: filterHolder
       
   839                       ) 
       
   840                      (SubChannelInfoSpec
       
   841                         subAspect: rootHolder
       
   842                         aspect: rootDirectoryHolder
       
   843                       )
       
   844                       
       
   845                      (SubChannelInfoSpec
       
   846                         subAspect: showHiddenFiles
       
   847                         aspect: showHiddenFiles
       
   848                       )
       
   849                     )
       
   850                     createNewApplication: true
       
   851                     createNewBuilder: true
       
   852                     postBuildCallback: postBuildTreeBrowser:
       
   853                   )
       
   854                  (LabelSpec
       
   855                     label: 'Filename:'
       
   856                     name: 'FilenameLabel'
       
   857                     layout: (LayoutFrame 3 0 -25 1 73 0 -1 1)
       
   858                     translateLabel: true
       
   859                     labelChannel: filenameLabelHolder
       
   860                     adjust: left
       
   861                   )
       
   862                  (FilenameInputFieldSpec
       
   863                     name: 'FilenameEntryField'
       
   864                     layout: (LayoutFrame 70 0 -25 1 -4 1 -1 1)
       
   865                     tabable: true
       
   866                     model: filenameHolder
       
   867                     immediateAccept: false
       
   868                     acceptOnPointerLeave: false
       
   869                     hasKeyboardFocusInitially: true
       
   870                     postBuildCallback: postBuildFileNameField:
       
   871                   )
   904                   )
   872                  )
   905                  )
   873                
   906                
   874               )
   907               )
       
   908               postBuildCallback: postBuildVerticalView:
   875             )
   909             )
   876            (HorizontalPanelViewSpec
   910            (HorizontalPanelViewSpec
   877               name: 'ButtonPanel'
   911               name: 'ButtonPanel'
   878               layout: (LayoutFrame 0 0.0 -32 1 0 1 0 1)
   912               layout: (LayoutFrame 0 0.0 -32 1 0 1 0 1)
   879               visibilityChannel: buttonPanelVisibleHolder
   913               visibilityChannel: buttonPanelVisibleHolder
   890                     name: 'cancelButton'
   924                     name: 'cancelButton'
   891                     translateLabel: true
   925                     translateLabel: true
   892                     labelChannel: cancelLabelHolder
   926                     labelChannel: cancelLabelHolder
   893                     tabable: true
   927                     tabable: true
   894                     model: doCancel
   928                     model: doCancel
   895                     extent: (Point 131 22)
   929                     extent: (Point 129 22)
   896                   )
   930                   )
   897                  (ActionButtonSpec
   931                  (ActionButtonSpec
   898                     label: 'Append'
   932                     label: 'Append'
   899                     name: 'appendButton'
   933                     name: 'appendButton'
   900                     visibilityChannel: appendButtonVisibleHolder
   934                     visibilityChannel: appendButtonVisibleHolder
   901                     translateLabel: true
   935                     translateLabel: true
   902                     labelChannel: appendLabelHolder
   936                     labelChannel: appendLabelHolder
   903                     tabable: true
   937                     tabable: true
   904                     model: appendPressed
   938                     model: appendPressed
   905                     extent: (Point 132 22)
   939                     extent: (Point 129 22)
   906                   )
   940                   )
   907                  (ActionButtonSpec
   941                  (ActionButtonSpec
   908                     label: 'OK'
   942                     label: 'OK'
   909                     name: 'okButton'
   943                     name: 'okButton'
   910                     translateLabel: true
   944                     translateLabel: true
   911                     labelChannel: okLabelHolder
   945                     labelChannel: okLabelHolder
   912                     tabable: true
   946                     tabable: true
   913                     model: okPressed
   947                     model: okPressed
   914                     isDefault: true
   948                     isDefault: true
   915                     extent: (Point 132 22)
   949                     extent: (Point 130 22)
   916                   )
   950                   )
   917                  )
   951                  )
   918                
   952                
   919               )
   953               )
   920             )
   954             )
  1699     ^ super update:something with:aParameter from:changedObject
  1733     ^ super update:something with:aParameter from:changedObject
  1700 
  1734 
  1701     "Modified: / 14-02-2011 / 17:54:35 / cg"
  1735     "Modified: / 14-02-2011 / 17:54:35 / cg"
  1702 ! !
  1736 ! !
  1703 
  1737 
       
  1738 !FileDialog methodsFor:'construction-adding'!
       
  1739 
       
  1740 addComponent: aView
       
  1741     verticalView addComponent: aView
       
  1742 
       
  1743     "Created: / 03-06-2013 / 17:47:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
  1744 ! !
       
  1745 
  1704 !FileDialog methodsFor:'event handling'!
  1746 !FileDialog methodsFor:'event handling'!
  1705 
  1747 
  1706 appendWasPressed
  1748 appendWasPressed
  1707     "valid after the dialog has been closed: true if append was pressed"
  1749     "valid after the dialog has been closed: true if append was pressed"
  1708 
  1750 
  1797     treeBrowser showHiddenFiles value:true.
  1839     treeBrowser showHiddenFiles value:true.
  1798 
  1840 
  1799     "Modified: / 24-08-2010 / 16:07:16 / sr"
  1841     "Modified: / 24-08-2010 / 16:07:16 / sr"
  1800 !
  1842 !
  1801 
  1843 
       
  1844 postBuildVerticalView:aView
       
  1845     verticalView := aView.
       
  1846 
       
  1847     "Created: / 03-06-2013 / 17:41:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
  1848 !
       
  1849 
  1802 postBuildWith:aBuilder    
  1850 postBuildWith:aBuilder    
  1803     treeBrowser multipleSelect:multipleSelect.
  1851     treeBrowser multipleSelect:multipleSelect.
  1804     appendWasPressed := false.
  1852     appendWasPressed := false.
  1805 
  1853 
  1806     (aBuilder componentAt:'cancelButton') cursor:(Cursor thumbsDown).
  1854     (aBuilder componentAt:'cancelButton') cursor:(Cursor thumbsDown).
  1819     "filenameHolder contains the initial file name, or nil"
  1867     "filenameHolder contains the initial file name, or nil"
  1820     self startFilename:self filenameHolder value.
  1868     self startFilename:self filenameHolder value.
  1821     treeBrowser currentFileNameHolder value:(Array with:self startFilename).
  1869     treeBrowser currentFileNameHolder value:(Array with:self startFilename).
  1822 !
  1870 !
  1823 
  1871 
  1824 postOpenWith:aBuilder
  1872 preOpenWith:aBuilder
  1825     |lastExtent|
  1873     | h |
  1826 
  1874 
  1827     super postOpenWith:aBuilder.
  1875     "Increase height of the window so height of the file part
  1828     treeBrowser currentFileNameHolder value:(OrderedCollection with:self startFilename).
  1876      remain the same"
  1829 
  1877     h := 0.
  1830     lastExtent := self class lastExtent.
  1878     verticalView subViews from:2 do:[:view|
  1831     lastExtent notNil ifTrue:[
  1879         h := h + view preferredHeight.
  1832         self window topView extent:lastExtent.
  1880     ].
  1833     ].
  1881     aBuilder window height: aBuilder window height + h.
  1834     self window label:self initialText.
  1882 
       
  1883     "Created: / 03-06-2013 / 18:19:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
  1835 !
  1884 !
  1836 
  1885 
  1837 rememberExtent
  1886 rememberExtent
  1838     self class lastExtent:self window topView extent.
  1887     self class lastExtent:self window topView extent.
  1839 
  1888 
  1994 ! !
  2043 ! !
  1995 
  2044 
  1996 !FileDialog class methodsFor:'documentation'!
  2045 !FileDialog class methodsFor:'documentation'!
  1997 
  2046 
  1998 version
  2047 version
  1999     ^ '$Id: FileDialog.st 7854 2012-01-30 17:49:41Z vranyj1 $'
  2048     ^ '$Header: /cvs/stx/stx/libtool/FileDialog.st,v 1.117 2013-06-03 18:41:12 +0100 vrany Exp $'
  2000 !
  2049 !
  2001 
  2050 
  2002 version_CVS
  2051 version_CVS
  2003     ^ '§Header: /cvs/stx/stx/libtool/FileDialog.st,v 1.116 2011/04/04 08:09:15 stefan Exp §'
  2052     ^ '$Header: /cvs/stx/stx/libtool/FileDialog.st,v 1.117 2013-06-03 18:41:12 +0100 vrany Exp $'
  2004 !
  2053 !
  2005 
  2054 
  2006 version_HG
  2055 version_HG
  2007 
  2056 
  2008     ^ '$Changeset: <not expanded> $'
  2057     ^ '$Changeset: <not expanded> $'