* DBModeler/Inspectors/AttributeInspector.*

* DBModeler/Inspectors/GNUmakefile
Moved to Renaissance for the Attribute Inspector



git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@30280 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Dave Wetzel 2010-05-02 22:47:00 +00:00
parent 51b728a2b8
commit 4983a5c38e
5 changed files with 503 additions and 129 deletions

View file

@ -1,3 +1,8 @@
2010-05-02 David Wetzel <dave@turbocat.de>
* DBModeler/Inspectors/AttributeInspector.*
* DBModeler/Inspectors/GNUmakefile
Moved to Renaissance for the Attribute Inspector
2010-04-29 David Wetzel <dave@turbocat.de>
* EOControl/EOMutableKnownKeyDictionary.m
removed __PRETTY_FUNCTION__ from Asserts

View file

@ -0,0 +1,180 @@
<?xml version="1.0"?>
<!DOCTYPE gsmarkup>
<gsmarkup>
<objects>
<window title="Inspector" width="268.0" heigth="365.0" resizable="no" autosaveName="Inspector" visible="no">
<vbox>
<label backgroundColor="white" selectable="no" textColor="555555">Nothing to Inspect</label>
</vbox>
</window>
<window id="window" title="Inspector" width="268.0" resizable="no" autosaveName="Inspector" visible="no">
<vbox>
<grid rowType="proportional" columnType="proportional">
<gridRow>
<label halign="right" selectable="no">Name:</label> <textField id="nameField" delegate="#NSOwner"></textField>
</gridRow>
<gridRow>
<popUpButton autoenabledItems="no" target="#NSOwner" id="derivedPopUp" action="setDerived:" halign="right">
<popUpButtonItem tag="0" title="Column" />
<popUpButtonItem tag="1" title="Derived" />
</popUpButton>
<textField delegate="#NSOwner" id="extNameField" />
</gridRow>
<gridRow>
<label halign="right" selectable="no">External Type:</label> <textField id="extTypeField" delegate="#NSOwner" />
</gridRow>
</grid>
<box title="Internal Data Type" topPadding="10" leftPadding="4" rightPadding="4" id="internalData">
<vbox>
<popUpButton target="#NSOwner" action="selectInternalDataType:" id="valueClassSelect">
<popUpButtonItem tag="0" title="String" />
<popUpButtonItem tag="1" title="Decimal Number" />
<popUpButtonItem tag="2" title="Number" />
<popUpButtonItem tag="3" title="Date" />
<popUpButtonItem tag="4" title="Data" />
<popUpButtonItem tag="5" title="Custom" />
</popUpButton>
<!-- width="254" halign="center" -->
<view id="flipView" halign="wexpand" height="180" >
<view/>
</view>
</vbox>
</box>
</vbox>
</window>
<window title="Inspector" width="268.0" resizable="no" autosaveName="Inspector" visible="no">
<vbox>
<box title="Custom Flip" topPadding="10" leftPadding="15" rightPadding="15" id="customFlip">
<grid rowType="proportional" columnType="proportional">
<gridRow>
<label halign="right" selectable="no">External Width:</label> <textField id="custom_width" delegate="#NSOwner" />
</gridRow>
<gridRow>
<label halign="right" selectable="no">Class:</label> <textField id="custom_class" delegate="#NSOwner" />
</gridRow>
<gridRow>
<label halign="right" selectable="no">Factory Method:</label> <textField id="custom_factory" delegate="#NSOwner" />
</gridRow>
<gridRow>
<label halign="right" selectable="no">Conversion Meth.:</label> <textField id="custom_conversion" delegate="#NSOwner" />
</gridRow>
<gridRow>
<label halign="right" selectable="no">Init argument:</label>
<popUpButton halign="left" target="#NSOwner" action="changeLevel:" id="custom_arg">
<popUpButtonItem tag="0" title="NSData" />
<popUpButtonItem tag="1" title="NSString" />
<popUpButtonItem tag="2" title="Bytes" />
</popUpButton>
</gridRow>
</grid>
</box>
<box title="Data Flip" topPadding="10" leftPadding="15" rightPadding="15" id="dataFlip">
<grid rowType="proportional" columnType="proportional">
<gridRow>
<label halign="right" selectable="no">External Width:</label> <textField id="data_width" delegate="#NSOwner" />
</gridRow>
</grid>
</box>
<box title="String Flip" width="250.0" heigth="50" topPadding="10" leftPadding="15" rightPadding="15" id="stringFlip">
<grid rowType="proportional" columnType="proportional">
<gridRow>
<label halign="right" selectable="no">External Width:</label> <textField id="string_width" delegate="#NSOwner" />
</gridRow>
</grid>
</box>
<box title="Decimal Flip" topPadding="10" leftPadding="15" rightPadding="15" id="decimalFlip">
<vbox>
<grid rowType="proportional" columnType="proportional">
<gridRow>
<label halign="right" selectable="no">External Precision:</label> <textField id="decimal_precision" delegate="#NSOwner" />
</gridRow>
<gridRow>
<label halign="right" selectable="no">External Scale:</label> <textField id="decimal_scale" delegate="#NSOwner" />
</gridRow>
</grid>
<label color="grey">12345.67 has a precision of 7</label>
<label color="grey">and a scale of 2.</label>
</vbox>
</box>
<box title="Number Flip" topPadding="10" leftPadding="15" rightPadding="15" id="numberFlip">
<vbox>
<grid rowType="proportional">
<gridRow>
<label halign="right" selectable="no">Value Type:</label>
<popUpButton halign="left" target="#NSOwner" action="changeValueType:" id="valueTypePopUp">
<popUpButtonItem tag="0" title="int" />
<popUpButtonItem tag="1" title="double" />
<popUpButtonItem tag="2" title="float" />
<popUpButtonItem tag="3" title="char" />
<popUpButtonItem tag="4" title="short" />
<popUpButtonItem tag="5" title="unsigned int" />
<popUpButtonItem tag="6" title="unsigned char" />
<popUpButtonItem tag="7" title="unsigned short" />
<popUpButtonItem tag="8" title="long" />
<popUpButtonItem tag="9" title="unsigned long" />
<popUpButtonItem tag="10" title="long long" />
<popUpButtonItem tag="11" title="uns. long long" />
</popUpButton>
</gridRow>
</grid>
<vbox>
<label textColor="red">Never use float or double for</label>
<label textColor="red">monetary values as rounding will</label>
<label textColor="red">lead to non-expected results.</label>
</vbox>
</vbox>
</box>
<box title="Date Flip" topPadding="10" leftPadding="15" rightPadding="15" id="dateFlip">
<vbox>
<label textColor="red">Nothing here right now.</label>
</vbox>
</box>
</vbox>
</window>
</objects>
<connectors>
<outlet source="#NSOwner" target="#window" key="window"/>
<outlet source="#NSOwner" target="#derivedPopUp" key="derivedPopUp"/>
<outlet source="#NSOwner" target="#nameField" key="nameField"/>
<outlet source="#NSOwner" target="#extNameField" key="extNameField"/>
<outlet source="#NSOwner" target="#extTypeField" key="extTypeField"/>
<outlet source="#NSOwner" target="#internalData" key="internalData"/>
<outlet source="#NSOwner" target="#customFlip" key="customFlip"/>
<outlet source="#NSOwner" target="#decimalFlip" key="decimalFlip"/>
<outlet source="#NSOwner" target="#data_width" key="data_width"/>
<outlet source="#NSOwner" target="#dataFlip" key="dataFlip"/>
<outlet source="#NSOwner" target="#stringFlip" key="stringFlip"/>
<outlet source="#NSOwner" target="#valueClassSelect" key="valueClassSelect"/>
<outlet source="#NSOwner" target="#flipView" key="flipView"/>
<outlet source="#NSOwner" target="#decimal_scale" key="decimal_scale"/>
<outlet source="#NSOwner" target="#decimal_precision" key="decimal_precision"/>
<outlet source="#NSOwner" target="#string_width" key="string_width"/>
<outlet source="#NSOwner" target="#numberFlip" key="numberFlip"/>
<outlet source="#NSOwner" target="#valueTypePopUp" key="valueTypePopUp"/>
<outlet source="#NSOwner" target="#dateFlip" key="dateFlip"/>
<outlet source="#NSOwner" target="#custom_width" key="custom_width"/>
<outlet source="#NSOwner" target="#custom_class" key="custom_class"/>
<outlet source="#NSOwner" target="#custom_factory" key="custom_factory"/>
<outlet source="#NSOwner" target="#custom_conversion" key="custom_conversion"/>
<outlet source="#NSOwner" target="#custom_arg" key="custom_arg"/>
</connectors>
</gsmarkup>

View file

@ -45,37 +45,39 @@
{
IBOutlet NSTextField *_extNameField;
IBOutlet NSTextField *_extTypeField;
IBOutlet NSPopUpButton *_valueTypeSelect;
IBOutlet NSPopUpButton *_derivedPopUp; // or column
IBOutlet NSPopUpButton *_valueClassSelect;
IBOutlet NSPopUpButton *_valueTypePopUp; // int, float, ...
IBOutlet NSPopUpButton *_flipSelect;// select which valueClassName/flip
IBOutlet NSBox *_flipView; // gets replaced with a *Flip...
IBOutlet NSBox *_internalData;
IBOutlet NSTextField *_nameField;
IBOutlet NSBox *_numberFlip; // to edit number properties
IBOutlet NSTextField *_nameField;
IBOutlet NSBox *_customFlip; // default
IBOutlet NSBox *_dataFlip;
IBOutlet NSBox *_dateFlip;
IBOutlet NSBox *_decimalFlip;
IBOutlet NSBox *_stringFlip;
IBOutlet NSTextField *_custom_width;
IBOutlet NSTextField *_custom_class;
IBOutlet NSTextField *_custom_factory;
IBOutlet NSTextField *_custom_conversion;
IBOutlet NSPopUpButton *_custom_arg;
IBOutlet NSTextField *_string_width;
IBOutlet NSTextField *_decimal_precision;
IBOutlet NSTextField *_decimal_scale;
IBOutlet NSTextField *_data_width;
IBOutlet NSButton *_date_tz;
NSDictionary *_flipDict;
NSDictionary *_classTitleDict;
NSDictionary *_valueTypeDict;
IBOutlet NSBox *_customFlip; // default
IBOutlet NSBox *_dataFlip;
IBOutlet NSBox *_dateFlip;
IBOutlet NSBox *_decimalFlip;
IBOutlet NSBox *_numberFlip;
IBOutlet NSBox *_stringFlip;
NSTextField *_custom_width;
NSTextField *_custom_class;
NSTextField *_custom_factory;
NSTextField *_custom_conversion;
NSPopUpButton *_custom_arg;
NSTextField *_string_width;
NSTextField *_decimal_precision;
NSTextField *_decimal_width;
NSTextField *_data_width;
NSButton *_date_tz;
}
/* generic */
- (IBAction) selectInternalDataType:(id)sender;
@ -89,7 +91,6 @@
- (IBAction) setClassName:(id)sender;
- (IBAction) setFactoryMethod:(id)sender;
- (IBAction) setConversionMethod:(id)sender;
- (IBAction) setInitArgument:(id)sender;
- (IBAction) setValueType:(id)sender;
- (IBAction) setTimeZone:(id)sender;
@end

View file

@ -3,6 +3,8 @@
Author: Matt Rice <ratmice@gmail.com>
Date: 2005, 2006
Author: David Wetzel <dave@turbocat.de>
Date: 2010
This file is part of DBModeler.
@ -30,23 +32,22 @@
#ifndef GNUSTEP
#include <GNUstepBase/GNUstep.h>
#include <GNUstepBase/GSCategories.h>
#endif
#define NO_ZEROS(x, i) i ? [x setIntValue:i] : [x setStringValue:@""];
@implementation AttributeInspector
- (void) awakeFromNib
- (void) awakeFromGSMarkup //awakeFromNib
{
RETAIN(_internalData);
_flipDict =
[[NSDictionary alloc] initWithObjectsAndKeys:
_stringFlip, @"String",
_customFlip, @"Custom",
_dataFlip, @"Data",
_dateFlip, @"Date",
_decimalFlip, @"Decimal Number",
_numberFlip, @"Number",
[_stringFlip contentView], @"NSString",
[_customFlip contentView], @"Custom",
[_dataFlip contentView], @"NSData",
[_dateFlip contentView], @"NSCalendarDate",
[_decimalFlip contentView], @"NSDecimalNumber",
[_numberFlip contentView], @"NSNumber",
nil];
_valueTypeDict =
@ -79,17 +80,13 @@
_classTitleDict =
[[NSDictionary alloc] initWithObjectsAndKeys:
@"String", @"NSString",
@"Data", @"NSData",
@"Number", @"NSNumber",
@"Date", @"NSCalendarDate",
@"Decimal Number", @"NSDecimalNumber",
@"NSString", @"String",
@"NSData", @"Data",
@"NSNumber", @"Number",
@"NSDecimalNumber", @"Decimal Number",
@"NSCalendarDate", @"Date",
@"0", @"NSString",
@"1", @"NSDecimalNumber",
@"2", @"NSNumber",
@"3", @"NSCalendarDate",
@"4", @"NSData",
nil];
}
- (NSString *) _titleForPopUp
@ -97,7 +94,10 @@
NSString *vcn = [(EOAttribute *)[self selectedObject] valueClassName];
NSString *ret;
NSLog(@"_titleForPopUp:vcn '%@' ",vcn);
ret = [_classTitleDict objectForKey:vcn];
NSLog(@"_titleForPopUp:ret '%@' ",ret);
if (!ret)
return @"Custom";
@ -111,7 +111,14 @@
- (NSBox *) _viewForTitle:(NSString *)title
{
return (NSBox *)[_flipDict objectForKey:title];
NSBox * myview = [_flipDict objectForKey:title];
if (!myview) {
myview = [_flipDict objectForKey:@"Custom"];
}
return myview;
}
- (float) displayOrder
@ -136,78 +143,258 @@
- (IBAction) selectInternalDataType:(id)sender;
{
EOAttribute *obj = [self selectedObject];
NSString *title = [_flipSelect titleOfSelectedItem];
NSString *className = [self _classNameForTitle:title];
if (![[obj valueClassName] isEqual:className])
{
[obj setValueClassName:className];
}
if ([className isEqual:@"NSNumber"])
{
if (![obj valueType])
{
[obj setValueType:@"d"];
}
}
else
{
[obj setValueType:@""];
}
EOAttribute *attr = [self selectedObject];
switch ([[sender selectedItem] tag]) {
case 0:
[attr setValueClassName:@"NSString"];
break;
case 1:
[attr setValueClassName:@"NSDecimalNumber"];
break;
case 2:
[attr setValueClassName:@"NSNumber"];
break;
case 3:
[attr setValueClassName:@"NSCalendarDate"];
break;
case 4:
[attr setValueClassName:@"NSData"];
break;
case 5:
[attr setValueClassName:@"Custom"];
break;
default:
break;
}
[self refresh];
}
- (void) putSubViewBack
{
NSView * subView = nil;
if ([[_flipView subviews] count] > 0) {
subView = [[_flipView subviews] objectAtIndex:0];
[subView removeFromSuperviewWithoutNeedingDisplay];
}
}
- (IBAction) changeValueType:(NSPopUpButton*) sender
{
EOAttribute * attr = [self selectedObject];
switch ([[sender selectedItem] tag]) {
case 0: /* int */
[attr setValueType:@"i"];
break;
case 1: /* double */
[attr setValueType:@"d"];
break;
case 2: /* float */
[attr setValueType:@"f"];
break;
case 3: /* char */
[attr setValueType:@"c"];
break;
case 4: /* short */
[attr setValueType:@"s"];
break;
case 5: /* unsigned int */
[attr setValueType:@"I"];
break;
case 6: /* unsigned char */
[attr setValueType:@"C"];
break;
case 7: /* unsigned short */
[attr setValueType:@"S"];
break;
case 8: /* long */
[attr setValueType:@"l"];
break;
case 9: /* unsigned long */
[attr setValueType:@"L"];
break;
case 10: /* long long */
[attr setValueType:@"u"];
break;
case 11: /* unsigned long long */
[attr setValueType:@"U"];
break;
default:
break;
}
}
- (void) _updateValueTypePopUpWithAttribute:(EOAttribute*) attr
{
NSString *valueType = [attr valueType];
unichar valueTypeChar;
if ((valueType) && ([valueType length])) {
valueTypeChar = [valueType characterAtIndex:0];
} else {
return;
}
NSInteger tagValue = 0;
switch (valueTypeChar) {
case 'i':
tagValue = 0;
break;
case 'd':
tagValue = 1;
break;
case 'f':
tagValue = 2;
break;
case 'c':
tagValue = 3;
break;
case 's':
tagValue = 4;
break;
case 'I':
tagValue = 5;
break;
case 'C':
tagValue = 6;
break;
case 'S':
tagValue = 7;
break;
case 'l':
tagValue = 8;
break;
case 'L':
tagValue = 9;
break;
case 'u':
tagValue = 10;
break;
case 'U':
tagValue = 11;
break;
default:
break;
}
[_valueTypePopUp selectItemWithTag:tagValue];
}
- (void) _updateStringViewWithAttribute:(EOAttribute*) attr
{
NO_ZEROS(_string_width, [attr width]);
}
- (void) _updateDecimalNumberViewWithAttribute:(EOAttribute*) attr
{
NO_ZEROS(_decimal_scale, [attr scale]);
NO_ZEROS(_decimal_precision, [attr precision]);
}
- (void) _updateDataViewWithAttribute:(EOAttribute*) attr
{
NO_ZEROS(_data_width, [attr width]);
}
- (void) _updateCustomViewWithAttribute:(EOAttribute*) attr
{
NSString * tmpStr = nil;
NO_ZEROS(_custom_width, [attr width]);
[_custom_class setStringValue:[attr valueClassName]];
tmpStr = [attr valueFactoryMethodName];
if (!tmpStr) {
[attr setValueFactoryMethodName:@""];
}
tmpStr = [attr adaptorValueConversionMethodName];
if (!tmpStr) {
[attr setAdaptorValueConversionMethodName:@""];
}
[_custom_factory setStringValue:[attr valueFactoryMethodName]];
[_custom_conversion setStringValue:[attr adaptorValueConversionMethodName]];
[_custom_arg selectItemWithTag:[attr factoryMethodArgumentType]];
}
- (void) _updateValueClassPopUpWithAttribute:(EOAttribute*) attr
{
NSString * tagString = [_classTitleDict objectForKey:[attr valueClassName]];
NSInteger tagValue = 0;
if (!tagString) {
tagValue = 5; // custom
[self _updateCustomViewWithAttribute:attr];
} else {
tagValue = [tagString integerValue];
switch (tagValue) {
case 0: // NSString
[self _updateStringViewWithAttribute:attr];
break;
case 1: // NSDecimalNumber
[self _updateDecimalNumberViewWithAttribute:attr];
break;
case 2: // NSNumber
[self _updateValueTypePopUpWithAttribute:attr];
break;
case 3: // NSCalendarDate
// nothing for now
break;
case 4: // NSData
[self _updateDataViewWithAttribute:attr];
break;
default:
break;
}
}
[_valueClassSelect selectItemWithTag:tagValue];
}
- (void) refresh
{
EOAttribute *obj = [self selectedObject];
NSString *title = [self _titleForPopUp];
NSString *title = [obj valueClassName];
NSBox *flipTo = [self _viewForTitle:title];
[_nameField setStringValue:[obj name]];
[_extNameField setStringValue:[obj columnName]];
[_extTypeField setStringValue:[obj externalType]];
[_flipSelect selectItemWithTitle:title];
[flipTo setFrame: [_flipView frame]];
[_internalData replaceSubview:_flipView with:flipTo];
_flipView = flipTo;
[self performSelector:
NSSelectorFromString([@"update" stringByAppendingString:[title stringByReplacingString:@" " withString:@""]])];
if ([obj isDerived]) {
[_derivedPopUp selectItemWithTag:1];
} else {
[_derivedPopUp selectItemWithTag:0];
}
[self putSubViewBack];
[_flipView setNeedsDisplay:YES];
[_flipView addSubview:flipTo];
[self _updateValueClassPopUpWithAttribute:obj];
}
- (void) updateString
{
int tmp;
tmp = [[self selectedObject] width];
NO_ZEROS(_string_width,tmp);
}
- (void) updateCustom
{
EOAttribute *obj = [self selectedObject];
int tmp;
tmp = [obj width];
NO_ZEROS(_custom_width, tmp);
[_custom_class setStringValue:[obj valueClassName]];
[_custom_factory setStringValue:[obj valueFactoryMethodName]];
[_custom_conversion setStringValue:[obj adaptorValueConversionMethodName]];
[_custom_arg selectItemAtIndex:
[_custom_arg indexOfItemWithTag: [obj factoryMethodArgumentType]]];
}
- (void) updateDecimalNumber
{
EOAttribute *obj = [self selectedObject];
int tmp;
tmp = [obj width];
NO_ZEROS(_decimal_width, tmp);
tmp = [obj precision];
NO_ZEROS(_decimal_precision, tmp);
}
- (void) updateNumber
{
@ -216,24 +403,14 @@
NSString *valueTypeName;
valueTypeName = [_valueTypeDict objectForKey: valType];
[_valueTypeSelect selectItemWithTitle:valueTypeName];
NSLog(@"updateNumber %@", valueTypeName);
[_valueClassSelect selectItemWithTitle:valueTypeName];
}
- (void) updateDate
{
}
- (void) updateData
{
int tmp;
tmp = [[self selectedObject] width];
NO_ZEROS(_data_width, tmp);
}
- (BOOL) canInspectObject:(id)obj
{
NSLog(@"%s: %@", __PRETTY_FUNCTION__, obj);
return [obj isKindOfClass:[EOAttribute class]];
}
@ -242,23 +419,33 @@
EOAttribute *obj = [self selectedObject];
NSString *valueType = nil;
if (sender == _valueTypeSelect)
{
valueType = [_valueTypeDict objectForKey:[sender titleOfSelectedItem]];
}
else if (sender == self)
{
valueType = @"";
}
[obj setValueType:valueType];
}
- (IBAction) setDerived:(id)sender
{
NSLog(@"%s:%@",__PRETTY_FUNCTION__, sender);
// EOAttribute *obj = [self selectedObject];
// if ([sender tag] == 0) { // Column
// [obj setIsDerived:NO];
// } else {
// [obj setIsDerived:YES];
// }
}
- (IBAction) setTimeZone:(id)sender;
{
// fixme
}
- (IBAction) changeLevel:(id)sender;
{
[(EOAttribute *)[self selectedObject] setFactoryMethodArgumentType:[[sender selectedItem] tag]];
}
- (IBAction) setWidth:(id)sender;
{
[(EOAttribute *)[self selectedObject] setWidth:[sender intValue]];
@ -269,6 +456,11 @@
[(EOAttribute *)[self selectedObject] setPrecision:[sender intValue]];
}
- (IBAction) setScale:(id)sender;
{
[(EOAttribute *)[self selectedObject] setScale:[sender intValue]];
}
- (IBAction) setClassName:(id)sender;
{
[(EOAttribute *)[self selectedObject] setValueClassName:[sender stringValue]];
@ -285,11 +477,6 @@
[[self selectedObject] setAdaptorValueConversionMethodName:[sender stringValue]];
}
- (IBAction) setInitArgument:(id)sender
{
[[self selectedObject] setFactoryMethodArgumentType:[[sender selectedItem] tag]];
}
- (void) controlTextDidEndEditing:(NSNotification *)notif
{
id obj = [notif object];
@ -302,9 +489,10 @@
[self setName:_nameField];
else if (obj == _custom_width
|| obj == _data_width
|| obj == _decimal_width
|| obj == _string_width)
[self setWidth:_custom_width];
[self setWidth:obj];
else if (obj == _decimal_scale)
[self setScale:obj];
else if (obj == _decimal_precision)
[self setPrecision:_decimal_precision];
else if (obj == _custom_class)

View file

@ -37,7 +37,7 @@ RelationshipInspector.gorm \
RelationshipInspector.tiff
Inspectors_OBJC_FILES+=RelationshipInspector.m
Inspectors_RESOURCE_FILES+=AttributeInspector.gorm
Inspectors_RESOURCE_FILES+=AttributeInspector.gorm AttributeInspector.gsmarkup
Inspectors_OBJC_FILES+=AttributeInspector.m
Inspectors_RESOURCE_FILES+=AdvancedEntityInspector.gorm