first commit
This commit is contained in:
438
Preferences.mm
Normal file
438
Preferences.mm
Normal file
@@ -0,0 +1,438 @@
|
||||
/* 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
|
||||
/* }}} */
|
||||
Reference in New Issue
Block a user