1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
|
//
// mxUtils.m
// MySQLGUICommon
//
// Created by Alfredo Kojima on 9/20/04.
// Copyright 2004 MySQL AB. All rights reserved.
//
#import "mxUtils.h"
#define N_(s) s
NSString *MXGetErrorString(MYX_LIB_ERROR error)
{
static NSString *msgs[]= {
@"",
N_(@"Can't open file."),
N_(@"Can't connect to server instance."),
N_(@"Error parsing XML file."),
N_(@"Error parsing XML file (bad document)."),
N_(@"Error parsing XML file (empty document)."),
N_(@"Error executing SQL command."),
N_(@"Executing stopped."),
N_(@"Internal error in libxml (could not change memory allocators)."),
N_(@"The object was not found in the database."),
N_(@"Cannot read from file."),
N_(@"Error during character set conversion."),
N_(@"Invalid character set specified.")
};
if (error < sizeof(msgs)/sizeof(NSString*))
return NSLocalizedString(msgs[error], nil);
else
return @"Unknown error.";
}
void MXRunAlertPanelWithError(NSString *title, NSString *message, MYX_LIB_ERROR error)
{
NSString *errmsg= MXGetErrorString(error);
NSRunAlertPanel(title, @"%@\n%@", nil, nil, nil, message,
errmsg,nil);
}
void MXRunAlertPanelWithMySQLError(NSString *title, NSString *message, MYSQL *mysql)
{
char *tmp;
NSRunAlertPanel(title, @"%@\n%s (error %i)", nil, nil, nil, message,
tmp= myx_mysql_error(mysql), myx_mysql_errno(mysql));
g_free(tmp);
}
NSImage *MXGetImageFromBundle(NSBundle *bundle, NSString *image)
{
NSString *path= [bundle pathForResource:[image stringByDeletingPathExtension]
ofType:[image pathExtension]];
if (!path)
return nil;
return [[[NSImage alloc] initWithContentsOfFile:path] autorelease];
}
@interface mxUtilsClass : NSObject
{
}
@end
@implementation mxUtilsClass
@end
NSImage *MXGetCommonImage(MXCommonImage img)
{
static NSString *commonImages[]= {
@"mini_error.png",
@"mini_warning.png",
@"mini_notice.png"
};
static NSMutableDictionary *imageCache= nil;
NSImage *image;
if (!imageCache)
imageCache= [[NSMutableDictionary alloc] init];
image= [imageCache objectForKey:commonImages[img]];
if (!image)
{
image= MXGetImageFromBundle([NSBundle bundleForClass:[mxUtilsClass class]], commonImages[img]);
[imageCache setObject:image forKey:commonImages[img]];
}
return image;
}
void MXExpandOutline(NSOutlineView *outline, BOOL expandChildren)
{
id ds= [outline dataSource];
id item;
int i;
int count= [ds outlineView:outline numberOfChildrenOfItem:nil];
for (i= 0; i < count; i++)
{
item= [ds outlineView:outline child:i ofItem:nil];
[outline expandItem:item expandChildren:expandChildren];
}
}
static NSDictionary *getExpandedItems(NSOutlineView *outline, id dataSource,
id pitem, int levels, id column)
{
NSMutableDictionary *dict= [NSMutableDictionary dictionary];
unsigned int i, count= [dataSource outlineView:outline numberOfChildrenOfItem:pitem];
for (i= 0; i < count; i++)
{
id item= [dataSource outlineView:outline child:i ofItem:pitem];
if ([outline isExpandable:item] && [outline isItemExpanded:item])
{
id key= [dataSource outlineView:outline
objectValueForTableColumn:column
byItem:item];
id value;
if (levels > 0 || levels < 0)
value= getExpandedItems(outline, dataSource, item, levels-1, column);
else
value= [NSNull null];
[dict setObject:value forKey:key];
}
}
return dict;
}
NSDictionary *MXGetExpandedOutlineItems(NSOutlineView *outline, int levels, id column)
{
if (!column) column= [[outline tableColumns] objectAtIndex:0];
return getExpandedItems(outline, [outline dataSource], nil, levels, column);
}
static void expandItems(NSDictionary *dict, NSOutlineView *outline,
id dataSource, id pitem, id column)
{
int count= [dataSource outlineView:outline numberOfChildrenOfItem:pitem];
unsigned int i;
for (i= 0; i < count; i++)
{
id item= [dataSource outlineView:outline child:i ofItem:pitem];
id key= [dataSource outlineView:outline
objectValueForTableColumn:column
byItem:item];
NSDictionary *subdict;
if ((subdict= [dict objectForKey:key]))
{
[outline expandItem:item];
if ([subdict isKindOfClass:[NSDictionary class]] && [subdict count] > 0)
expandItems(subdict, outline, dataSource, item, column);
}
}
}
void MXExpandOutlineItems(NSOutlineView *outline, NSDictionary *items, id column)
{
if (!column) column= [[outline tableColumns] objectAtIndex:0];
expandItems(items,outline,[outline dataSource],nil,column);
}
void MXResizeTableColumnToFitValue(NSTableView *table, NSTableColumn *column, NSString *value)
{
NSFont *font= [[column dataCell] font];
float width;
width= [font widthOfString:value]+8;
if (width > [column width])
[column setWidth:width];
}
void MXResizeTableColumnsToFit(NSTableView *table, NSTableColumn *column)
{
NSFont *font= [[column dataCell] font];
float width;
unsigned int i, c;
id ds= [table dataSource];
width= [column width];
c= [ds numberOfRowsInTableView:table];
for (i= 0; i < c; i++)
{
NSString *value= [ds tableView:table objectValueForTableColumn:column row:i];
float w;
w= [font widthOfString:value];
if (w > width)
width= w;
}
if (width > [column width])
[column setWidth:width];
}
|