diff options
author | Bibiko <bibiko@eva.mpg.de> | 2010-09-06 10:32:11 +0000 |
---|---|---|
committer | Bibiko <bibiko@eva.mpg.de> | 2010-09-06 10:32:11 +0000 |
commit | e23211c9c7406bee071e02b52da06c9e8896f7d4 (patch) | |
tree | 65b25cd95882c704b1448b33f1bd6b8c7b043eeb | |
parent | 1c0f63972d0ba9c337601c6c7f5500082c555c20 (diff) | |
download | sequelpro-e23211c9c7406bee071e02b52da06c9e8896f7d4.tar.gz sequelpro-e23211c9c7406bee071e02b52da06c9e8896f7d4.tar.bz2 sequelpro-e23211c9c7406bee071e02b52da06c9e8896f7d4.zip |
• CSV Import Mapper sheet:
- added keyboard shortcut ⌘T to show available tables list
- added chance to add a new columns to an existing table (⌘⌥A)
- added chance to remove currently new added columns (⌘⌫) - context menu; to remove all new columns one can reselect the table
Note: New columns will be added after pressing 'Import' and before the import process starts; if an error occurred the sheet keeps open to give the user the chance to correct errors whereby successfully created new columns won't be editable anymore.
-rw-r--r-- | Interfaces/English.lproj/DataMigrationDialog.xib | 764 | ||||
-rw-r--r-- | Source/SPFieldMapperController.h | 3 | ||||
-rw-r--r-- | Source/SPFieldMapperController.m | 238 |
3 files changed, 948 insertions, 57 deletions
diff --git a/Interfaces/English.lproj/DataMigrationDialog.xib b/Interfaces/English.lproj/DataMigrationDialog.xib index 2d3b9172..c5f721c7 100644 --- a/Interfaces/English.lproj/DataMigrationDialog.xib +++ b/Interfaces/English.lproj/DataMigrationDialog.xib @@ -12,7 +12,8 @@ </object> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="457"/> + <integer value="422"/> + <integer value="42"/> </object> <object class="NSArray" key="IBDocument.PluginDependencies"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -51,7 +52,7 @@ <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> <string key="NSWindowContentMinSize">{522, 348}</string> <object class="NSView" key="NSWindowView" id="78582513"> - <nil key="NSNextResponder"/> + <reference key="NSNextResponder"/> <int key="NSvFlags">274</int> <object class="NSMutableArray" key="NSSubviews"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -152,7 +153,7 @@ </object> <object class="NSButton" id="436297995"> <reference key="NSNextResponder" ref="297364507"/> - <int key="NSvFlags">264</int> + <int key="NSvFlags">265</int> <string key="NSFrame">{{400, 51}, {226, 32}}</string> <reference key="NSSuperview" ref="297364507"/> <bool key="NSEnabled">YES</bool> @@ -170,6 +171,46 @@ <int key="NSPeriodicInterval">25</int> </object> </object> + <object class="NSButton" id="863317681"> + <reference key="NSNextResponder" ref="297364507"/> + <int key="NSvFlags">265</int> + <string key="NSFrame">{{552, 1}, {226, 32}}</string> + <reference key="NSSuperview" ref="297364507"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="240320447"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">AddNewColumn_Dummy_Button</string> + <reference key="NSSupport" ref="388072550"/> + <reference key="NSControlView" ref="863317681"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">402653313</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent">a</string> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSButton" id="1021918763"> + <reference key="NSNextResponder" ref="297364507"/> + <int key="NSvFlags">265</int> + <string key="NSFrame">{{556, 1}, {226, 32}}</string> + <reference key="NSSuperview" ref="297364507"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="760384053"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">RemoveNewColumn_Dummy_Button</string> + <reference key="NSSupport" ref="388072550"/> + <reference key="NSControlView" ref="1021918763"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">268435585</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"></string> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> </object> <string key="NSFrame">{{1, 1}, {522, 39}}</string> <reference key="NSSuperview" ref="617902336"/> @@ -661,9 +702,9 @@ <reference key="NSSupport" ref="26"/> <reference key="NSControlView" ref="549705971"/> <int key="NSButtonFlags">109199615</int> - <int key="NSButtonFlags2">129</int> + <int key="NSButtonFlags2">268435585</int> <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> + <string key="NSKeyEquivalent">t</string> <int key="NSPeriodicDelay">400</int> <int key="NSPeriodicInterval">75</int> <nil key="NSMenuItem"/> @@ -1051,6 +1092,29 @@ <object class="NSTextView" id="249839159"> <reference key="NSNextResponder" ref="396898918"/> <int key="NSvFlags">2322</int> + <object class="NSMutableSet" key="NSDragTypes"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="set.sortedObjects"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>Apple HTML pasteboard type</string> + <string>Apple PDF pasteboard type</string> + <string>Apple PICT pasteboard type</string> + <string>Apple PNG pasteboard type</string> + <string>Apple URL pasteboard type</string> + <string>CorePasteboardFlavorType 0x6D6F6F76</string> + <string>NSColor pasteboard type</string> + <string>NSFilenamesPboardType</string> + <string>NSStringPboardType</string> + <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string> + <string>NeXT RTFD pasteboard type</string> + <string>NeXT Rich Text Format v1.0 pasteboard type</string> + <string>NeXT TIFF v4.0 pasteboard type</string> + <string>NeXT font pasteboard type</string> + <string>NeXT ruler pasteboard type</string> + <string>WebURLsWithTitlesPboardType</string> + <string>public.url</string> + </object> + </object> <string key="NSFrameSize">{400, 14}</string> <reference key="NSSuperview" ref="396898918"/> <object class="NSTextContainer" key="NSTextContainer" id="510363477"> @@ -1469,6 +1533,7 @@ </object> </object> <string key="NSFrameSize">{522, 348}</string> + <reference key="NSSuperview"/> </object> <string key="NSScreenRect">{{0, 0}, {1280, 778}}</string> <string key="NSMinSize">{522, 370}</string> @@ -1911,6 +1976,26 @@ <object class="NSMenuItem" id="510117931"> <reference key="NSMenu" ref="949736607"/> <string key="NSTitle">Add Column to Target Table…</string> + <string key="NSKeyEquiv">a</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="884724275"/> + <reference key="NSMixedImage" ref="1071040955"/> + </object> + <object class="NSMenuItem" id="1039633400"> + <reference key="NSMenu" ref="949736607"/> + <string key="NSTitle">Remove New Column:</string> + <string type="base64-UTF8" key="NSKeyEquiv">CA</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="884724275"/> + <reference key="NSMixedImage" ref="1071040955"/> + </object> + <object class="NSMenuItem" id="606607210"> + <reference key="NSMenu" ref="949736607"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsHidden">YES</bool> + <string key="NSTitle">Edit Field Type for Column:</string> <string key="NSKeyEquiv"/> <int key="NSMnemonicLoc">2147483647</int> <reference key="NSOnImage" ref="884724275"/> @@ -1931,7 +2016,7 @@ <string key="NSWindowContentMaxSize">{269, 120}</string> <string key="NSWindowContentMinSize">{269, 120}</string> <object class="NSView" key="NSWindowView" id="433154275"> - <reference key="NSNextResponder"/> + <nil key="NSNextResponder"/> <int key="NSvFlags">256</int> <object class="NSMutableArray" key="NSSubviews"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -2087,7 +2172,6 @@ </object> </object> <string key="NSFrameSize">{269, 120}</string> - <reference key="NSSuperview"/> </object> <string key="NSScreenRect">{{0, 0}, {1280, 778}}</string> <string key="NSMinSize">{269, 142}</string> @@ -2809,6 +2893,46 @@ </object> <int key="connectionID">487</int> </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">addNewColumn:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="510117931"/> + </object> + <int key="connectionID">489</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">editColumn:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="606607210"/> + </object> + <int key="connectionID">490</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">removeNewColumn:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="1039633400"/> + </object> + <int key="connectionID">492</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">addNewColumn:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="863317681"/> + </object> + <int key="connectionID">496</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">removeNewColumn:</string> + <reference key="source" ref="1001"/> + <reference key="destination" ref="1021918763"/> + </object> + <int key="connectionID">500</int> + </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> <object class="NSArray" key="orderedObjects"> @@ -2899,6 +3023,8 @@ <bool key="EncodedWithXMLCoder">YES</bool> <reference ref="1052916804"/> <reference ref="436297995"/> + <reference ref="863317681"/> + <reference ref="1021918763"/> </object> <reference key="parent" ref="78582513"/> <string key="objectName">Header Box (Box)</string> @@ -3785,6 +3911,8 @@ <reference ref="196792906"/> <reference ref="510117931"/> <reference ref="385019673"/> + <reference ref="606607210"/> + <reference ref="1039633400"/> </object> <reference key="parent" ref="0"/> <string key="objectName">Context Menu</string> @@ -3854,7 +3982,7 @@ <reference ref="433154275"/> </object> <reference key="parent" ref="0"/> - <string key="objectName">New Table Info</string> + <string key="objectName">New Table Info Sheet</string> </object> <object class="IBObjectRecord"> <int key="objectID">458</int> @@ -3972,6 +4100,46 @@ <reference key="object" ref="906976144"/> <reference key="parent" ref="358877055"/> </object> + <object class="IBObjectRecord"> + <int key="objectID">488</int> + <reference key="object" ref="606607210"/> + <reference key="parent" ref="949736607"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">491</int> + <reference key="object" ref="1039633400"/> + <reference key="parent" ref="949736607"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">493</int> + <reference key="object" ref="863317681"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="240320447"/> + </object> + <reference key="parent" ref="617902336"/> + <string key="objectName">Push Button (AddNewColumn_Dummy_Button)</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">494</int> + <reference key="object" ref="240320447"/> + <reference key="parent" ref="863317681"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">497</int> + <reference key="object" ref="1021918763"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="760384053"/> + </object> + <reference key="parent" ref="617902336"/> + <string key="objectName">Push Button (RemoveNewColumn_Dummy_Button)</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">498</int> + <reference key="object" ref="760384053"/> + <reference key="parent" ref="1021918763"/> + </object> </object> </object> <object class="NSMutableDictionary" key="flattenedProperties"> @@ -4186,6 +4354,12 @@ <string>485.IBPluginDependency</string> <string>485.ImportedFromIB2</string> <string>486.IBPluginDependency</string> + <string>488.IBPluginDependency</string> + <string>491.IBPluginDependency</string> + <string>493.IBPluginDependency</string> + <string>494.IBPluginDependency</string> + <string>497.IBPluginDependency</string> + <string>498.IBPluginDependency</string> <string>56.IBPluginDependency</string> <string>57.IBPluginDependency</string> <string>89.IBPluginDependency</string> @@ -4204,9 +4378,9 @@ <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{76, 229}, {522, 348}}</string> + <string>{{94, 522}, {522, 348}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{76, 229}, {522, 348}}</string> + <string>{{94, 522}, {522, 348}}</string> <integer value="1"/> <string>{{387, 725}, {432, 282}}</string> <boolean value="NO"/> @@ -4329,7 +4503,7 @@ <object class="IBToolTipAttribute" key="NS.object.0"> <string key="name">ToolTip</string> <reference key="object" ref="549705971"/> - <string key="toolTip">Choose database table in which the data will be inserted</string> + <string key="toolTip">Choose database table in which the data will be inserted (⌘T)</string> </object> </object> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> @@ -4439,7 +4613,7 @@ <string>SPTableView</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <integer value="1"/> - <string>{{295, 465}, {284, 53}}</string> + <string>{{276, 527}, {303, 93}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> @@ -4515,6 +4689,12 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>{{169, 564}, {465, 20}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> @@ -4544,7 +4724,7 @@ </object> </object> <nil key="sourceID"/> - <int key="maxID">487</int> + <int key="maxID">500</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> @@ -7350,6 +7530,564 @@ </object> </object> </object> + <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.1+"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">SPFieldMapperController</string> + <string key="superclassName">NSWindowController</string> + <object class="NSMutableDictionary" key="actions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>addGlobalSourceVariable:</string> + <string>addGlobalValue:</string> + <string>addNewColumn:</string> + <string>advancedCheckboxValidation:</string> + <string>changeFieldAlignment:</string> + <string>changeHasHeaderCheckbox:</string> + <string>changeImportMethod:</string> + <string>changeTableTarget:</string> + <string>closeGlobalValuesSheet:</string> + <string>closeInfoSheet:</string> + <string>closeSheet:</string> + <string>goBackToFileChooser:</string> + <string>insertNULLValue:</string> + <string>newTable:</string> + <string>newTableInfo:</string> + <string>openAdvancedSheet:</string> + <string>removeGlobalValue:</string> + <string>removeNewColumn:</string> + <string>setAllTypesTo:</string> + <string>stepRow:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + </object> + </object> + <object class="NSMutableDictionary" key="actionInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>addGlobalSourceVariable:</string> + <string>addGlobalValue:</string> + <string>addNewColumn:</string> + <string>advancedCheckboxValidation:</string> + <string>changeFieldAlignment:</string> + <string>changeHasHeaderCheckbox:</string> + <string>changeImportMethod:</string> + <string>changeTableTarget:</string> + <string>closeGlobalValuesSheet:</string> + <string>closeInfoSheet:</string> + <string>closeSheet:</string> + <string>goBackToFileChooser:</string> + <string>insertNULLValue:</string> + <string>newTable:</string> + <string>newTableInfo:</string> + <string>openAdvancedSheet:</string> + <string>removeGlobalValue:</string> + <string>removeNewColumn:</string> + <string>setAllTypesTo:</string> + <string>stepRow:</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBActionInfo"> + <string key="name">addGlobalSourceVariable:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">addGlobalValue:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">addNewColumn:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">advancedCheckboxValidation:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">changeFieldAlignment:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">changeHasHeaderCheckbox:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">changeImportMethod:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">changeTableTarget:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">closeGlobalValuesSheet:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">closeInfoSheet:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">closeSheet:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">goBackToFileChooser:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">insertNULLValue:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">newTable:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">newTableInfo:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">openAdvancedSheet:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">removeGlobalValue:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">removeNewColumn:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">setAllTypesTo:</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBActionInfo"> + <string key="name">stepRow:</string> + <string key="candidateClassName">id</string> + </object> + </object> + </object> + <object class="NSMutableDictionary" key="outlets"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>addGlobalValueButton</string> + <string>addNewColumnMenuItem</string> + <string>addRemainingDataSwitch</string> + <string>advancedBox</string> + <string>advancedButton</string> + <string>advancedInsertView</string> + <string>advancedLabel</string> + <string>advancedReplaceView</string> + <string>advancedUpdateView</string> + <string>alignByPopup</string> + <string>alignByPopupLabel</string> + <string>customQueryInstance</string> + <string>databaseDataInstance</string> + <string>delayedCheckBox</string> + <string>delayedReplaceCheckBox</string> + <string>fieldMapperTableScrollView</string> + <string>fieldMapperTableView</string> + <string>fieldMappingImportArray</string> + <string>fileSourcePath</string> + <string>globalValuesSheet</string> + <string>globalValuesTableView</string> + <string>highPriorityCheckBox</string> + <string>ignoreCheckBox</string> + <string>ignoreUpdateCheckBox</string> + <string>importButton</string> + <string>importFieldNamesHeaderSwitch</string> + <string>importMethodLabel</string> + <string>importMethodPopup</string> + <string>insertNULLValueButton</string> + <string>lowPriorityCheckBox</string> + <string>lowPriorityReplaceCheckBox</string> + <string>lowPriorityUpdateCheckBox</string> + <string>matchingNameMenuItem</string> + <string>newTableButton</string> + <string>newTableInfoEncodingPopup</string> + <string>newTableInfoEnginePopup</string> + <string>newTableInfoWindow</string> + <string>newTableNameInfoButton</string> + <string>newTableNameLabel</string> + <string>newTableNameTextField</string> + <string>onupdateCheckBox</string> + <string>onupdateTextView</string> + <string>recordCountLabel</string> + <string>removeGlobalValueButton</string> + <string>replaceAfterSavingCheckBox</string> + <string>rowDownButton</string> + <string>rowUpButton</string> + <string>setAllTypesToMenuItem</string> + <string>skipexistingRowsCheckBox</string> + <string>tableTargetPopup</string> + <string>tablesListInstance</string> + <string>theDelegate</string> + <string>typeComboxBox</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSButton</string> + <string>NSMenuItem</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>NSPopUpButton</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>SPTableView</string> + <string>id</string> + <string>NSPathControl</string> + <string>id</string> + <string>NSTableView</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>NSPopUpButton</string> + <string>NSButton</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>NSMenuItem</string> + <string>NSButton</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>NSButton</string> + <string>NSTextField</string> + <string>NSTextField</string> + <string>id</string> + <string>SPTextView</string> + <string>id</string> + <string>NSButton</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>NSMenuItem</string> + <string>id</string> + <string>NSPopUpButton</string> + <string>id</string> + <string>id</string> + <string>NSComboBoxCell</string> + </object> + </object> + <object class="NSMutableDictionary" key="toOneOutletInfosByName"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>addGlobalValueButton</string> + <string>addNewColumnMenuItem</string> + <string>addRemainingDataSwitch</string> + <string>advancedBox</string> + <string>advancedButton</string> + <string>advancedInsertView</string> + <string>advancedLabel</string> + <string>advancedReplaceView</string> + <string>advancedUpdateView</string> + <string>alignByPopup</string> + <string>alignByPopupLabel</string> + <string>customQueryInstance</string> + <string>databaseDataInstance</string> + <string>delayedCheckBox</string> + <string>delayedReplaceCheckBox</string> + <string>fieldMapperTableScrollView</string> + <string>fieldMapperTableView</string> + <string>fieldMappingImportArray</string> + <string>fileSourcePath</string> + <string>globalValuesSheet</string> + <string>globalValuesTableView</string> + <string>highPriorityCheckBox</string> + <string>ignoreCheckBox</string> + <string>ignoreUpdateCheckBox</string> + <string>importButton</string> + <string>importFieldNamesHeaderSwitch</string> + <string>importMethodLabel</string> + <string>importMethodPopup</string> + <string>insertNULLValueButton</string> + <string>lowPriorityCheckBox</string> + <string>lowPriorityReplaceCheckBox</string> + <string>lowPriorityUpdateCheckBox</string> + <string>matchingNameMenuItem</string> + <string>newTableButton</string> + <string>newTableInfoEncodingPopup</string> + <string>newTableInfoEnginePopup</string> + <string>newTableInfoWindow</string> + <string>newTableNameInfoButton</string> + <string>newTableNameLabel</string> + <string>newTableNameTextField</string> + <string>onupdateCheckBox</string> + <string>onupdateTextView</string> + <string>recordCountLabel</string> + <string>removeGlobalValueButton</string> + <string>replaceAfterSavingCheckBox</string> + <string>rowDownButton</string> + <string>rowUpButton</string> + <string>setAllTypesToMenuItem</string> + <string>skipexistingRowsCheckBox</string> + <string>tableTargetPopup</string> + <string>tablesListInstance</string> + <string>theDelegate</string> + <string>typeComboxBox</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBToOneOutletInfo"> + <string key="name">addGlobalValueButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">addNewColumnMenuItem</string> + <string key="candidateClassName">NSMenuItem</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">addRemainingDataSwitch</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">advancedBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">advancedButton</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">advancedInsertView</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">advancedLabel</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">advancedReplaceView</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">advancedUpdateView</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">alignByPopup</string> + <string key="candidateClassName">NSPopUpButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">alignByPopupLabel</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">customQueryInstance</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">databaseDataInstance</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">delayedCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">delayedReplaceCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">fieldMapperTableScrollView</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">fieldMapperTableView</string> + <string key="candidateClassName">SPTableView</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">fieldMappingImportArray</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">fileSourcePath</string> + <string key="candidateClassName">NSPathControl</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">globalValuesSheet</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">globalValuesTableView</string> + <string key="candidateClassName">NSTableView</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">highPriorityCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">ignoreCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">ignoreUpdateCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">importButton</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">importFieldNamesHeaderSwitch</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">importMethodLabel</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">importMethodPopup</string> + <string key="candidateClassName">NSPopUpButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">insertNULLValueButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">lowPriorityCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">lowPriorityReplaceCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">lowPriorityUpdateCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">matchingNameMenuItem</string> + <string key="candidateClassName">NSMenuItem</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">newTableButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">newTableInfoEncodingPopup</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">newTableInfoEnginePopup</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">newTableInfoWindow</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">newTableNameInfoButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">newTableNameLabel</string> + <string key="candidateClassName">NSTextField</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">newTableNameTextField</string> + <string key="candidateClassName">NSTextField</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">onupdateCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">onupdateTextView</string> + <string key="candidateClassName">SPTextView</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">recordCountLabel</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">removeGlobalValueButton</string> + <string key="candidateClassName">NSButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">replaceAfterSavingCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">rowDownButton</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">rowUpButton</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">setAllTypesToMenuItem</string> + <string key="candidateClassName">NSMenuItem</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">skipexistingRowsCheckBox</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">tableTargetPopup</string> + <string key="candidateClassName">NSPopUpButton</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">tablesListInstance</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">theDelegate</string> + <string key="candidateClassName">id</string> + </object> + <object class="IBToOneOutletInfo"> + <string key="name">typeComboxBox</string> + <string key="candidateClassName">NSComboBoxCell</string> + </object> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBDocumentRelativeSource</string> + <string key="minorKey">../../Source/SPFieldMapperController.h</string> + </object> + </object> + </object> <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="IBPartialClassDescription"> diff --git a/Source/SPFieldMapperController.h b/Source/SPFieldMapperController.h index 484ce53d..15295070 100644 --- a/Source/SPFieldMapperController.h +++ b/Source/SPFieldMapperController.h @@ -114,6 +114,7 @@ NSString *isEqualString; NSInteger numberOfImportColumns; + NSMutableIndexSet *toBeEditedRowIndexes; BOOL fieldMappingImportArrayIsPreview; BOOL importFieldNamesHeader; @@ -181,6 +182,8 @@ - (IBAction)newTableInfo:(id)sender; - (IBAction)closeInfoSheet:(id)sender; - (IBAction)addNewColumn:(id)sender; +- (IBAction)removeNewColumn:(id)sender; +// - (IBAction)editColumn:(id)sender; - (IBAction)setAllTypesTo:(id)sender; // Others diff --git a/Source/SPFieldMapperController.m b/Source/SPFieldMapperController.m index 2b262be6..7df1ea81 100644 --- a/Source/SPFieldMapperController.m +++ b/Source/SPFieldMapperController.m @@ -75,6 +75,7 @@ isEqualString = @"="; newTableMode = NO; addGlobalSheetIsOpen = NO; + toBeEditedRowIndexes = [[NSMutableIndexSet alloc] init]; prefs = [NSUserDefaults standardUserDefaults]; @@ -94,10 +95,12 @@ - (void)awakeFromNib { - [fieldMapperTableView setDelegate:self]; - [fieldMapperTableView setDataSource:self]; + // Set Context Menu [[[fieldMapperTableView menu] itemAtIndex:0] setHidden:YES]; [[[fieldMapperTableView menu] itemAtIndex:1] setHidden:YES]; + [[[fieldMapperTableView menu] itemAtIndex:2] setHidden:NO]; + [[[fieldMapperTableView menu] itemAtIndex:3] setHidden:NO]; + // [[[fieldMapperTableView menu] itemAtIndex:4] setHidden:NO]; // Set source path // Note: [fileSourcePath setURL:[NSURL fileWithPath:sourcePath]] does NOT work @@ -128,7 +131,7 @@ [tableTargetPopup addItemsWithTitles:allTableNames]; // Select either the currently selected table, or the first item in the list, or if no table in db switch to "New Table" mode - if ([[theDelegate valueForKeyPath:@"tableDocumentInstance"] table] != nil + if ([[theDelegate valueForKeyPath:@"tableDocumentInstance"] table] != nil && ![[tablesListInstance tableName] isEqualToString:@""] && [allTableNames containsObject:[tablesListInstance tableName]]) { [tableTargetPopup selectItemWithTitle:[tablesListInstance tableName]]; @@ -143,16 +146,16 @@ } [defaultFieldTypesForComboBox setArray:[NSArray arrayWithObjects: - @"varchar(255)", - @"char(65)", - @"text", - @"longtext", - @"int(11)", - @"bigint", - @"date", - @"datetime", - @"time", - @"timestamp", + @"VARCHAR(255)", + @"CHAR(63)", + @"TEXT", + @"LONGTEXT", + @"INT(11)", + @"BIGINT", + @"DATE", + @"DATETIME", + @"TIME", + @"TIMESTAMP", nil ]]; @@ -209,6 +212,7 @@ if (fieldMappingGlobalValuesSQLMarked) [fieldMappingGlobalValuesSQLMarked release]; if (fieldMappingTableDefaultValues) [fieldMappingTableDefaultValues release]; if (primaryKeyField) [primaryKeyField release]; + if (toBeEditedRowIndexes) [toBeEditedRowIndexes release]; [super dealloc]; } @@ -372,7 +376,7 @@ [prefs setObject:[newTableInfoEnginePopup titleOfSelectedItem] forKey:SPLastImportIntoNewTableType]; [prefs setObject:[newTableInfoEncodingPopup titleOfSelectedItem] forKey:SPLastImportIntoNewTableEncoding]; } - + [NSApp endSheet:[sender window] returnCode:[sender tag]]; [[sender window] orderOut:self]; } @@ -380,8 +384,45 @@ - (IBAction)closeSheet:(id)sender { + // Try to add new columns first + if(!newTableMode && [toBeEditedRowIndexes count] && [sender tag] == 1) { + [[self window] endEditingFor:nil]; + + NSUInteger currentIndex = [toBeEditedRowIndexes firstIndex]; + + while (currentIndex != NSNotFound) { + + NSMutableString *createString = [NSMutableString string]; + + [createString appendFormat:@"ALTER TABLE %@ ADD %@ %@", + [[tableTargetPopup titleOfSelectedItem] backtickQuotedString], + [[fieldMappingTableColumnNames objectAtIndex:currentIndex] backtickQuotedString], + [fieldMappingTableTypes objectAtIndex:currentIndex]]; + + [mySQLConnection queryString:createString]; + + if ([mySQLConnection queryErrored]) { + NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Error adding new column", @"error adding new column message") + defaultButton:NSLocalizedString(@"OK", @"OK button") + alternateButton:nil + otherButton:nil + informativeTextWithFormat:[NSString stringWithFormat:NSLocalizedString(@"An error occurred while trying to add the new column '%@' by\n\n%@.\n\nMySQL said: %@", @"error adding new column informative message"), [fieldMappingTableColumnNames objectAtIndex:currentIndex], createString, [mySQLConnection getLastErrorMessage]]]; + + [alert setAlertStyle:NSCriticalAlertStyle]; + [alert beginSheetModalForWindow:[self window] modalDelegate:self didEndSelector:nil contextInfo:nil]; + return; + } else { + [toBeEditedRowIndexes removeIndex:currentIndex]; + } + + currentIndex = [toBeEditedRowIndexes indexGreaterThanIndex:currentIndex]; + } + + + } + // Try to create the new TABLE - if(newTableMode && [sender tag] == 1) { + else if(newTableMode && [sender tag] == 1) { [[self window] endEditingFor:nil]; @@ -406,10 +447,10 @@ [mySQLConnection queryString:createString]; if ([mySQLConnection queryErrored]) { - NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Error adding new table", @"error adding new table message") - defaultButton:NSLocalizedString(@"OK", @"OK button") - alternateButton:nil - otherButton:nil + NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Error adding new table", @"error adding new table message") + defaultButton:NSLocalizedString(@"OK", @"OK button") + alternateButton:nil + otherButton:nil informativeTextWithFormat:[NSString stringWithFormat:NSLocalizedString(@"An error occurred while trying to add the new table '%@' by\n\n%@.\n\nMySQL said: %@", @"error adding new table informative message"), [newTableNameTextField stringValue], createString, [mySQLConnection getLastErrorMessage]]]; [alert setAlertStyle:NSCriticalAlertStyle]; @@ -434,6 +475,9 @@ NSArray *allTableNames = [tablesListInstance allTableNames]; NSInteger i; + // Remove all indexes for new columns + [toBeEditedRowIndexes removeAllIndexes]; + // Is Refresh List chosen? if([tableTargetPopup selectedItem] == [tableTargetPopup itemAtIndex:1]) { [tableTargetPopup removeAllItems]; @@ -448,7 +492,7 @@ } // Select either the currently selected table, or the first item in the list, or if no table in db switch to "New Table" mode - if ([[theDelegate valueForKeyPath:@"tableDocumentInstance"] table] != nil + if ([[theDelegate valueForKeyPath:@"tableDocumentInstance"] table] != nil && ![[tablesListInstance tableName] isEqualToString:@""] && [allTableNames containsObject:[tablesListInstance tableName]]) { [tableTargetPopup selectItemWithTitle:[tablesListInstance tableName]]; @@ -718,8 +762,12 @@ { newTableMode = YES; + // Set Context Menu [[[fieldMapperTableView menu] itemAtIndex:0] setHidden:NO]; - [[[fieldMapperTableView menu] itemAtIndex:1] setHidden:NO]; + [[[fieldMapperTableView menu] itemAtIndex:1] setHidden:YES]; + [[[fieldMapperTableView menu] itemAtIndex:2] setHidden:YES]; + [[[fieldMapperTableView menu] itemAtIndex:3] setHidden:YES]; + // [[[fieldMapperTableView menu] itemAtIndex:4] setHidden:YES]; [importMethodPopup selectItemWithTitle:@"INSERT"]; [[importMethodPopup itemWithTitle:@"UPDATE"] setEnabled:NO]; @@ -739,14 +787,14 @@ for(id h in NSArrayObjectAtIndex(fieldMappingImportArray, 0)) { [fieldMappingTableColumnNames addObject:h]; [fieldMappingTableDefaultValues addObject:@""]; - [fieldMappingTableTypes addObject:@"varchar(255)"]; + [fieldMappingTableTypes addObject:@"VARCHAR(255)"]; } } else { NSInteger i = 0; for(id h in NSArrayObjectAtIndex(fieldMappingImportArray, 0)) { [fieldMappingTableColumnNames addObject:[NSString stringWithFormat:@"col_%ld", i++]]; [fieldMappingTableDefaultValues addObject:@""]; - [fieldMappingTableTypes addObject:@"varchar(255)"]; + [fieldMappingTableTypes addObject:@"VARCHAR(255)"]; } } @@ -771,11 +819,71 @@ [self validateImportButton]; } +/* + * Add new column to the selected table (processed after pressing 'Import' button) + */ - (IBAction)addNewColumn:(id)sender { - + + [fieldMappingOperatorArray addObject:doNotImport]; + [fieldMappingTableColumnNames addObject:NSLocalizedString(@"New Column Name", @"new column name placeholder string")]; + [fieldMappingTableTypes addObject:@"VARCHAR(255)"]; + [fieldMappingTableDefaultValues addObject:@""]; + + NSInteger newIndex = [fieldMappingTableTypes count]-1; + + [fieldMappingArray addObject:[NSNumber numberWithInteger:newIndex]]; + [toBeEditedRowIndexes addIndex:newIndex]; + + [fieldMapperTableView reloadData]; + + [fieldMapperTableView editColumn:2 row:newIndex withEvent:nil select:YES]; + +} + + +/* + * Remove currently new added column + */ +- (IBAction)removeNewColumn:(id)sender +{ + + NSInteger toBeRemovedIndex = [fieldMapperTableView selectedRow]; + + if(![toBeEditedRowIndexes containsIndex:toBeRemovedIndex]) { + NSBeep(); + return; + } + + [fieldMappingOperatorArray removeObjectAtIndex:toBeRemovedIndex]; + [fieldMappingTableColumnNames removeObjectAtIndex:toBeRemovedIndex]; + [fieldMappingTableTypes removeObjectAtIndex:toBeRemovedIndex]; + [fieldMappingTableDefaultValues removeObjectAtIndex:toBeRemovedIndex]; + + [fieldMappingArray removeObjectAtIndex:toBeRemovedIndex]; + [toBeEditedRowIndexes removeIndex:toBeRemovedIndex]; + + // Renumber indexes greater than toBeRemovedIndex + NSInteger currentIndex = [toBeEditedRowIndexes firstIndex]; + while(currentIndex != NSNotFound) { + if(currentIndex > toBeRemovedIndex) { + [toBeEditedRowIndexes addIndex:currentIndex-1]; + [toBeEditedRowIndexes removeIndex:currentIndex]; + } + currentIndex = [toBeEditedRowIndexes indexGreaterThanIndex:currentIndex]; + } + + [fieldMapperTableView reloadData]; + } +// - (IBAction)editColumn:(id)sender +// { +// toBeEditedRowIndexes = [fieldMapperTableView selectedRow]; +// [fieldMapperTableView reloadData]; +// [fieldMapperTableView editColumn:3 row:[fieldMapperTableView selectedRow] withEvent:nil select:YES]; +// } + /* * Set all table target field types to that one of the current selected type */ @@ -795,26 +903,29 @@ [type release]; } +/* + * Show sheet to set up encoding and engine for the new to be created table + */ - (IBAction)newTableInfo:(id)sender { [[self window] endEditingFor:nil]; - + // Populate the table type (engine) popup button [newTableInfoEnginePopup removeAllItems]; - + NSArray *engines = [databaseDataInstance getDatabaseStorageEngines]; - + // Add default menu item [newTableInfoEnginePopup addItemWithTitle:@"Default"]; [[newTableInfoEnginePopup menu] addItem:[NSMenuItem separatorItem]]; - + for (NSDictionary *engine in engines) { [newTableInfoEnginePopup addItemWithTitle:[engine objectForKey:@"Engine"]]; } - + [newTableInfoEnginePopup selectItemWithTitle:[prefs objectForKey:SPLastImportIntoNewTableType]]; - + // Populate the table encoding popup button with a default menu item [newTableInfoEncodingPopup removeAllItems]; [newTableInfoEncodingPopup addItemWithTitle:@"Default"]; @@ -846,7 +957,7 @@ [newTableInfoEncodingPopup selectItemWithTitle:[prefs objectForKey:SPLastImportIntoNewTableEncoding]]; } - + [NSApp beginSheet:newTableInfoWindow modalForWindow:[self window] modalDelegate:self @@ -1270,11 +1381,29 @@ - (BOOL)validateMenuItem:(NSMenuItem *)menuItem { + NSInteger row = [fieldMapperTableView selectedRow]; + + // Hide/display Remove New Column menu item + [[[fieldMapperTableView menu] itemAtIndex:3] setHidden:([toBeEditedRowIndexes containsIndex:row]) ? NO : YES]; + if (newTableMode && [menuItem action] == @selector(setAllTypesTo:)) { - NSInteger row = [fieldMapperTableView selectedRow]; - NSMenuItem *setAllItem = [[fieldMapperTableView menu] itemAtIndex:0]; - NSString *orgTitle = [[setAllItem title] substringToIndex:[[setAllItem title] rangeOfString:@":"].location]; - [setAllItem setTitle:[NSString stringWithFormat:@"%@: %@", orgTitle, [fieldMappingTableTypes objectAtIndex:row]]]; + NSString *orgTitle = [[menuItem title] substringToIndex:[[menuItem title] rangeOfString:@":"].location]; + [menuItem setTitle:[NSString stringWithFormat:@"%@: %@", orgTitle, [fieldMappingTableTypes objectAtIndex:row]]]; + } + else if (!newTableMode && [menuItem action] == @selector(editColumn:)) { + NSString *orgTitle = [[menuItem title] substringToIndex:[[menuItem title] rangeOfString:@":"].location]; + [menuItem setTitle:[NSString stringWithFormat:@"%@: %@", orgTitle, [fieldMappingTableColumnNames objectAtIndex:row]]]; + } + else if (!newTableMode && [menuItem action] == @selector(removeNewColumn:)) { + if([toBeEditedRowIndexes containsIndex:row]) { + NSString *orgTitle = [[menuItem title] substringToIndex:[[menuItem title] rangeOfString:@":"].location]; + [menuItem setTitle:[NSString stringWithFormat:@"%@: %@", orgTitle, [fieldMappingTableColumnNames objectAtIndex:row]]]; + return YES; + } else { + NSString *orgTitle = [[menuItem title] substringToIndex:[[menuItem title] rangeOfString:@":"].location]; + [menuItem setTitle:[NSString stringWithFormat:@"%@:", orgTitle]]; + return NO; + } } return YES; @@ -1369,6 +1498,13 @@ if(aTableView == fieldMapperTableView) { if ([[aTableColumn identifier] isEqualToString:@"target_field"]) { + if([toBeEditedRowIndexes containsIndex:rowIndex]) { + NSTextFieldCell *b = [[[NSTextFieldCell alloc] initTextCell:[fieldMappingTableColumnNames objectAtIndex:rowIndex]] autorelease]; + [b setEditable:YES]; + [b setFont:[NSFont systemFontOfSize:12]]; + [aTableColumn setDataCell:b]; + return b; + } if(newTableMode) { NSTextFieldCell *b = [[[NSTextFieldCell alloc] initTextCell:[fieldMappingTableColumnNames objectAtIndex:rowIndex]] autorelease]; [b setEditable:YES]; @@ -1385,6 +1521,10 @@ } else if ([[aTableColumn identifier] isEqualToString:@"type"]) { + if([toBeEditedRowIndexes containsIndex:rowIndex]) { + [aTableColumn setDataCell:typeComboxBox]; + return [fieldMappingTableTypes objectAtIndex:rowIndex]; + } if(newTableMode) { [aTableColumn setDataCell:typeComboxBox]; return [fieldMappingTableTypes objectAtIndex:rowIndex]; @@ -1460,6 +1600,8 @@ { if(aTableView == globalValuesTableView) return YES; + if([toBeEditedRowIndexes containsIndex:rowIndex]) return YES; + if(!newTableMode) return NO; return YES; @@ -1524,17 +1666,23 @@ } - else if (newTableMode && [[aTableColumn identifier] isEqualToString:@"target_field"]) { - if([(NSString*)anObject length]) { - [fieldMappingTableColumnNames replaceObjectAtIndex:rowIndex withObject:anObject]; + else if ([[aTableColumn identifier] isEqualToString:@"target_field"]) { + if(newTableMode || [toBeEditedRowIndexes containsIndex:rowIndex]) { + if([(NSString*)anObject length]) { + [fieldMappingTableColumnNames replaceObjectAtIndex:rowIndex withObject:anObject]; + } } } - else if (newTableMode && [[aTableColumn identifier] isEqualToString:@"type"]) { - if([(NSString*)anObject length]) { - [fieldMappingTableTypes replaceObjectAtIndex:rowIndex withObject:anObject]; - if(![defaultFieldTypesForComboBox containsObject:anObject]) - [defaultFieldTypesForComboBox insertObject:anObject atIndex:0]; + else if ([[aTableColumn identifier] isEqualToString:@"type"]) { + if(newTableMode || [toBeEditedRowIndexes containsIndex:rowIndex]) { + if([(NSString*)anObject length]) { + [fieldMappingTableTypes replaceObjectAtIndex:rowIndex withObject:anObject]; + if(![defaultFieldTypesForComboBox containsObject:anObject]) + [defaultFieldTypesForComboBox insertObject:anObject atIndex:0]; + } + } else { + } } @@ -1578,7 +1726,7 @@ - (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)command { - if(!newTableMode || addGlobalSheetIsOpen) return NO; + if((!newTableMode || addGlobalSheetIsOpen) && ![toBeEditedRowIndexes containsIndex:[fieldMapperTableView selectedRow]]) return NO; NSUInteger row, column; @@ -1667,6 +1815,8 @@ [[control window] makeFirstResponder:control]; + if(![toBeEditedRowIndexes containsIndex:newRow]) return NO; + [fieldMapperTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:newRow] byExtendingSelection:NO]; [fieldMapperTableView editColumn:column row:newRow withEvent:nil select:YES]; return YES; |