439 lines
11 KiB
Plaintext
439 lines
11 KiB
Plaintext
/* Source {{{ */
|
|
@interface Source : NSObject {
|
|
NSString *description_;
|
|
NSString *label_;
|
|
NSString *origin_;
|
|
|
|
NSString *uri_;
|
|
NSString *distribution_;
|
|
NSString *type_;
|
|
|
|
BOOL trusted_;
|
|
}
|
|
|
|
- (void) dealloc;
|
|
|
|
- (Source *) initWithMetaIndex:(metaIndex *)index;
|
|
|
|
- (BOOL) trusted;
|
|
|
|
- (NSString *) uri;
|
|
- (NSString *) distribution;
|
|
- (NSString *) type;
|
|
|
|
- (NSString *) description;
|
|
- (NSString *) label;
|
|
- (NSString *) origin;
|
|
@end
|
|
|
|
@implementation Source
|
|
|
|
- (void) dealloc {
|
|
[uri_ release];
|
|
[distribution_ release];
|
|
[type_ release];
|
|
|
|
if (description_ != nil)
|
|
[description_ release];
|
|
if (label_ != nil)
|
|
[label_ release];
|
|
if (origin_ != nil)
|
|
[origin_ release];
|
|
|
|
[super dealloc];
|
|
}
|
|
|
|
- (Source *) initWithMetaIndex:(metaIndex *)index {
|
|
if ((self = [super init]) != nil) {
|
|
trusted_ = index->IsTrusted();
|
|
|
|
uri_ = [[NSString stringWithCString:index->GetURI().c_str()] retain];
|
|
distribution_ = [[NSString stringWithCString:index->GetDist().c_str()] retain];
|
|
type_ = [[NSString stringWithCString:index->GetType()] retain];
|
|
|
|
description_ = nil;
|
|
label_ = nil;
|
|
origin_ = nil;
|
|
|
|
debReleaseIndex *dindex(dynamic_cast<debReleaseIndex *>(index));
|
|
if (dindex != NULL) {
|
|
std::ifstream release(dindex->MetaIndexFile("Release").c_str());
|
|
std::string line;
|
|
while (std::getline(release, line)) {
|
|
std::string::size_type colon(line.find(':'));
|
|
if (colon == std::string::npos)
|
|
continue;
|
|
|
|
std::string name(line.substr(0, colon));
|
|
std::string value(line.substr(colon + 1));
|
|
while (!value.empty() && value[0] == ' ')
|
|
value = value.substr(1);
|
|
|
|
if (name == "Description")
|
|
description_ = [[NSString stringWithCString:value.c_str()] retain];
|
|
else if (name == "Label")
|
|
label_ = [[NSString stringWithCString:value.c_str()] retain];
|
|
else if (name == "Origin")
|
|
origin_ = [[NSString stringWithCString:value.c_str()] retain];
|
|
}
|
|
}
|
|
} return self;
|
|
}
|
|
|
|
- (BOOL) trusted {
|
|
return trusted_;
|
|
}
|
|
|
|
- (NSString *) uri {
|
|
return uri_;
|
|
}
|
|
|
|
- (NSString *) distribution {
|
|
return distribution_;
|
|
}
|
|
|
|
- (NSString *) type {
|
|
return type_;
|
|
}
|
|
|
|
- (NSString *) description {
|
|
return description_;
|
|
}
|
|
|
|
- (NSString *) label {
|
|
return label_;
|
|
}
|
|
|
|
- (NSString *) origin {
|
|
return origin_;
|
|
}
|
|
|
|
@end
|
|
/* }}} */
|
|
/* Source Cell {{{ */
|
|
@interface SourceCell : UITableCell {
|
|
UITextLabel *description_;
|
|
UIRightTextLabel *label_;
|
|
UITextLabel *origin_;
|
|
}
|
|
|
|
- (void) dealloc;
|
|
|
|
- (SourceCell *) initWithSource:(Source *)source;
|
|
|
|
- (void) _setSelected:(float)fraction;
|
|
- (void) setSelected:(BOOL)selected;
|
|
- (void) setSelected:(BOOL)selected withFade:(BOOL)fade;
|
|
- (void) _setSelectionFadeFraction:(float)fraction;
|
|
|
|
@end
|
|
|
|
@implementation SourceCell
|
|
|
|
- (void) dealloc {
|
|
[description_ release];
|
|
[label_ release];
|
|
[origin_ release];
|
|
[super dealloc];
|
|
}
|
|
|
|
- (SourceCell *) initWithSource:(Source *)source {
|
|
if ((self = [super init]) != nil) {
|
|
GSFontRef bold = GSFontCreateWithName("Helvetica", kGSFontTraitBold, 20);
|
|
GSFontRef small = GSFontCreateWithName("Helvetica", kGSFontTraitNone, 14);
|
|
|
|
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
|
|
float clear[] = {0, 0, 0, 0};
|
|
|
|
NSString *description = [source description];
|
|
if (description == nil)
|
|
description = [source uri];
|
|
|
|
description_ = [[UITextLabel alloc] initWithFrame:CGRectMake(12, 7, 270, 25)];
|
|
[description_ setBackgroundColor:CGColorCreate(space, clear)];
|
|
[description_ setFont:bold];
|
|
[description_ setText:description];
|
|
|
|
NSString *label = [source label];
|
|
if (label == nil)
|
|
label = [source type];
|
|
|
|
label_ = [[UIRightTextLabel alloc] initWithFrame:CGRectMake(290, 32, 90, 25)];
|
|
[label_ setBackgroundColor:CGColorCreate(space, clear)];
|
|
[label_ setFont:small];
|
|
[label_ setText:label];
|
|
|
|
NSString *origin = [source origin];
|
|
if (origin == nil)
|
|
origin = [source distribution];
|
|
|
|
origin_ = [[UITextLabel alloc] initWithFrame:CGRectMake(13, 35, 315, 20)];
|
|
[origin_ setBackgroundColor:CGColorCreate(space, clear)];
|
|
[origin_ setFont:small];
|
|
[origin_ setText:origin];
|
|
|
|
[self addSubview:description_];
|
|
[self addSubview:label_];
|
|
[self addSubview:origin_];
|
|
|
|
CFRelease(small);
|
|
CFRelease(bold);
|
|
} return self;
|
|
}
|
|
|
|
- (void) _setSelected:(float)fraction {
|
|
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
|
|
|
|
float black[] = {
|
|
interpolate(0.0, 1.0, fraction),
|
|
interpolate(0.0, 1.0, fraction),
|
|
interpolate(0.0, 1.0, fraction),
|
|
1.0};
|
|
|
|
float blue[] = {
|
|
interpolate(0.2, 1.0, fraction),
|
|
interpolate(0.2, 1.0, fraction),
|
|
interpolate(1.0, 1.0, fraction),
|
|
1.0};
|
|
|
|
float gray[] = {
|
|
interpolate(0.4, 1.0, fraction),
|
|
interpolate(0.4, 1.0, fraction),
|
|
interpolate(0.4, 1.0, fraction),
|
|
1.0};
|
|
|
|
[description_ setColor:CGColorCreate(space, black)];
|
|
[label_ setColor:CGColorCreate(space, blue)];
|
|
[origin_ setColor:CGColorCreate(space, gray)];
|
|
}
|
|
|
|
- (void) setSelected:(BOOL)selected {
|
|
[self _setSelected:(selected ? 1.0 : 0.0)];
|
|
[super setSelected:selected];
|
|
}
|
|
|
|
- (void) setSelected:(BOOL)selected withFade:(BOOL)fade {
|
|
if (!fade)
|
|
[self _setSelected:(selected ? 1.0 : 0.0)];
|
|
[super setSelected:selected withFade:fade];
|
|
}
|
|
|
|
- (void) _setSelectionFadeFraction:(float)fraction {
|
|
[self _setSelected:fraction];
|
|
[super _setSelectionFadeFraction:fraction];
|
|
}
|
|
|
|
@end
|
|
/* }}} */
|
|
|
|
/* Sources View {{{ */
|
|
@interface SourcesView : UIView {
|
|
UISectionList *list_;
|
|
Database *database_;
|
|
id delegate_;
|
|
NSMutableArray *sources_;
|
|
UIActionSheet *alert_;
|
|
}
|
|
|
|
- (int) numberOfSectionsInSectionList:(UISectionList *)list;
|
|
- (NSString *) sectionList:(UISectionList *)list titleForSection:(int)section;
|
|
- (int) sectionList:(UISectionList *)list rowForSection:(int)section;
|
|
|
|
- (int) numberOfRowsInTable:(UITable *)table;
|
|
- (float) table:(UITable *)table heightForRow:(int)row;
|
|
- (UITableCell *) table:(UITable *)table cellForRow:(int)row column:(UITableColumn *)col;
|
|
- (BOOL) table:(UITable *)table showDisclosureForRow:(int)row;
|
|
- (void) tableRowSelected:(NSNotification*)notification;
|
|
|
|
- (void) navigationBar:(UINavigationBar *)navbar buttonClicked:(int)button;
|
|
|
|
- (void) dealloc;
|
|
- (id) initWithFrame:(CGRect)frame database:(Database *)database;
|
|
- (void) setDelegate:(id)delegate;
|
|
- (void) reloadData;
|
|
- (NSString *) leftTitle;
|
|
- (NSString *) rightTitle;
|
|
@end
|
|
|
|
@implementation SourcesView
|
|
|
|
- (int) numberOfSectionsInSectionList:(UISectionList *)list {
|
|
return 1;
|
|
}
|
|
|
|
- (NSString *) sectionList:(UISectionList *)list titleForSection:(int)section {
|
|
return @"sources";
|
|
}
|
|
|
|
- (int) sectionList:(UISectionList *)list rowForSection:(int)section {
|
|
return 0;
|
|
}
|
|
|
|
- (int) numberOfRowsInTable:(UITable *)table {
|
|
return [sources_ count];
|
|
}
|
|
|
|
- (float) table:(UITable *)table heightForRow:(int)row {
|
|
return 64;
|
|
}
|
|
|
|
- (UITableCell *) table:(UITable *)table cellForRow:(int)row column:(UITableColumn *)col {
|
|
return [[[SourceCell alloc] initWithSource:[sources_ objectAtIndex:row]] autorelease];
|
|
}
|
|
|
|
- (BOOL) table:(UITable *)table showDisclosureForRow:(int)row {
|
|
return NO;
|
|
}
|
|
|
|
- (void) tableRowSelected:(NSNotification*)notification {
|
|
UITable *table([list_ table]);
|
|
int row([table selectedRow]);
|
|
if (row == INT_MAX)
|
|
return;
|
|
|
|
[table selectRow:-1 byExtendingSelection:NO withFade:YES];
|
|
}
|
|
|
|
- (void) alertSheet:(UIActionSheet *)sheet buttonClicked:(int)button {
|
|
[alert_ dismiss];
|
|
[alert_ release];
|
|
alert_ = nil;
|
|
}
|
|
|
|
- (void) navigationBar:(UINavigationBar *)navbar buttonClicked:(int)button {
|
|
switch (button) {
|
|
case 0:
|
|
alert_ = [[UIActionSheet alloc]
|
|
initWithTitle:@"Unimplemented"
|
|
buttons:[NSArray arrayWithObjects:@"Okay", nil]
|
|
defaultButtonIndex:0
|
|
delegate:self
|
|
context:self
|
|
];
|
|
|
|
[alert_ setBodyText:@"This feature will be implemented soon. In the mean time, you may add sources by adding .list files to '/etc/apt/sources.list.d'. If you'd like to be in the default list, please contact the author of Packager."];
|
|
[alert_ popupAlertAnimated:YES];
|
|
break;
|
|
|
|
case 1:
|
|
[delegate_ update];
|
|
break;
|
|
}
|
|
}
|
|
|
|
- (void) dealloc {
|
|
if (sources_ != nil)
|
|
[sources_ release];
|
|
[list_ release];
|
|
[super dealloc];
|
|
}
|
|
|
|
- (id) initWithFrame:(CGRect)frame database:(Database *)database {
|
|
if ((self = [super initWithFrame:frame]) != nil) {
|
|
database_ = database;
|
|
sources_ = nil;
|
|
|
|
CGSize navsize = [UINavigationBar defaultSize];
|
|
CGRect navrect = {{0, 0}, navsize};
|
|
CGRect bounds = [self bounds];
|
|
|
|
navbar_ = [[UINavigationBar alloc] initWithFrame:navrect];
|
|
[self addSubview:navbar_];
|
|
|
|
[navbar_ setBarStyle:1];
|
|
[navbar_ setDelegate:self];
|
|
|
|
UINavigationItem *navitem = [[[UINavigationItem alloc] initWithTitle:@"Sources"] autorelease];
|
|
[navbar_ pushNavigationItem:navitem];
|
|
|
|
list_ = [[UISectionList alloc] initWithFrame:CGRectMake(
|
|
0, navsize.height, bounds.size.width, bounds.size.height - navsize.height
|
|
)];
|
|
|
|
[self addSubview:list_];
|
|
|
|
[list_ setDataSource:self];
|
|
[list_ setShouldHideHeaderInShortLists:NO];
|
|
|
|
UITableColumn *column = [[UITableColumn alloc]
|
|
initWithTitle:@"Name"
|
|
identifier:@"name"
|
|
width:frame.size.width
|
|
];
|
|
|
|
UITable *table = [list_ table];
|
|
[table setSeparatorStyle:1];
|
|
[table addTableColumn:column];
|
|
[table setDelegate:self];
|
|
} return self;
|
|
}
|
|
|
|
- (void) setDelegate:(id)delegate {
|
|
delegate_ = delegate;
|
|
}
|
|
|
|
- (void) reloadData {
|
|
pkgSourceList list;
|
|
_assert(list.ReadMainList());
|
|
|
|
if (sources_ != nil)
|
|
[sources_ release];
|
|
|
|
sources_ = [[NSMutableArray arrayWithCapacity:16] retain];
|
|
for (pkgSourceList::const_iterator source = list.begin(); source != list.end(); ++source)
|
|
[sources_ addObject:[[[Source alloc] initWithMetaIndex:*source] autorelease]];
|
|
|
|
[list_ reloadData];
|
|
}
|
|
|
|
- (NSString *) leftTitle {
|
|
return @"Refresh All";
|
|
}
|
|
|
|
- (NSString *) rightTitle {
|
|
return @"Edit";
|
|
}
|
|
|
|
@end
|
|
/* }}} */
|
|
/* Settings View {{{ */
|
|
@interface SettingsView : ResetView {
|
|
}
|
|
|
|
- (void) dealloc;
|
|
- (void) reloadData;
|
|
@end
|
|
|
|
@implementation SettingsView
|
|
|
|
- (void) dealloc {
|
|
[super dealloc];
|
|
}
|
|
|
|
- (id) initWithFrame:(CGRect)frame database:(Database *)database {
|
|
if ((self = [super initWithFrame:frame]) != nil) {
|
|
database_ = database;
|
|
sources_ = nil;
|
|
|
|
CGSize navsize = [UINavigationBar defaultSize];
|
|
CGRect navrect = {{0, 0}, navsize};
|
|
CGRect bounds = [self bounds];
|
|
|
|
navbar_ = [[UINavigationBar alloc] initWithFrame:navrect];
|
|
[self addSubview:navbar_];
|
|
|
|
[navbar_ setBarStyle:1];
|
|
[navbar_ setDelegate:self];
|
|
|
|
UINavigationItem *navitem = [[[UINavigationItem alloc] initWithTitle:@"Settings"] autorelease];
|
|
[navbar_ pushNavigationItem:navitem];
|
|
} return self;
|
|
}
|
|
|
|
- (void) reloadData {
|
|
[self resetView];
|
|
}
|
|
|
|
@end
|
|
/* }}} */
|