Added UI controls for languages and its methods

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@31764 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Germán Arias 2010-12-23 02:22:26 +00:00
parent affd155f9c
commit 2613728937
6 changed files with 204 additions and 67 deletions

View file

@ -1,3 +1,14 @@
2010-12-22 German Arias <german@xelalug.org>
* Headers/ProjectCenter/PCProject.h:
Added method -resourceDirForLanguage:. So we can call this
method to manage the languages.
* Headers/ProjectCenter/PCProjectInspector.h:
* Framework/PCProjectInspector.m:
* Framework/English.lproj/ProjectLanguages.gorm:
Added UI controls for languages at Inspector, and methods
-addLanguage: and -removeLanguage:.
2010-12-18 German Arias <german@xelalug.org>
* Headers/ProjectCenter/PCProjectInspector.h:

View file

@ -1,10 +1,21 @@
{
"## Comment" = "Do NOT change this file, Gorm maintains it";
FirstResponder = {
Actions = (
"addLanguage:",
"removeLanguage:"
);
Super = NSObject;
};
PCProjectInspector = {
Actions = (
"addLanguage:",
"removeLanguage:"
);
Outlets = (
projectLanguagesView
projectLanguagesView,
languagesList,
newLanguage
);
Super = NSObject;
};

View file

@ -5,7 +5,8 @@
Authors: Philippe C.D. Robert
Serg Stoyan
Riccardo Mottola
Riccardo Mottola
German Arias
This file is part of GNUstep.
@ -58,7 +59,7 @@
selector:@selector(updateValues:)
name:PCProjectDictDidChangeNotification
object:nil];
// Track Browser selection changes
[[NSNotificationCenter defaultCenter]
addObserver:self
@ -192,31 +193,33 @@
// Build Atributes
if (sender == installDomainPopup)
{
[project setProjectDictObject:newEntry forKey:PCInstallDomain notify:YES];
[project setProjectDictObject:newEntry
forKey:PCInstallDomain
notify:YES];
}
else if (sender == cppOptField)
{
[project setProjectDictObject:newEntry
forKey:PCPreprocessorOptions
notify:YES];
forKey:PCPreprocessorOptions
notify:YES];
}
else if (sender == objcOptField)
{
[project setProjectDictObject:newEntry
forKey:PCObjCCompilerOptions
notify:YES];
notify:YES];
}
else if (sender == cOptField)
{
[project setProjectDictObject:newEntry
forKey:PCCompilerOptions
notify:YES];
notify:YES];
}
else if (sender == ldOptField)
{
[project setProjectDictObject:newEntry
forKey:PCLinkerOptions
notify:YES];
notify:YES];
}
// Project Description
else if (sender == descriptionField)
@ -234,8 +237,8 @@
else if (sender == licDescriptionField)
{
[project setProjectDictObject:newEntry
forKey:PCCopyrightDescription
notify:YES];
forKey:PCCopyrightDescription
notify:YES];
}
else if (sender == urlField)
{
@ -282,14 +285,14 @@
if (rootProject != project)
{
[inspectorPanel setTitle: [NSString stringWithFormat:
@"%@ - Project Inspector", [rootProject projectName]]];
@"%@ - Project Inspector", [rootProject projectName]]];
}
project = [projectManager activeProject];
projectDict = [project projectDict];
PCLogStatus(self, @"Active projectChanged to %@",
[[project projectDict] objectForKey:PCProjectName]);
[[project projectDict] objectForKey:PCProjectName]);
// 1. Get custom project attributes view
newProjAttrSubview = [project projectAttributesView];
@ -300,7 +303,7 @@
else
{
[projectAttributesView replaceSubview:projectAttributesSubview
with:newProjAttrSubview];
with:newProjAttrSubview];
}
projectAttributesSubview = newProjAttrSubview;
@ -334,7 +337,11 @@
// Project Attributes
[projectTypeField setStringValue:[projectDict objectForKey:PCProjectType]];
[projectNameField setStringValue:[projectDict objectForKey:PCProjectName]];
[projectLanguagePB selectItemWithTitle:[projectDict objectForKey:PCLanguage]];
[projectLanguagePB removeAllItems];
[projectLanguagePB addItemsWithTitles:
[projectDict objectForKey:PCUserLanguages]];
[projectLanguagePB selectItemWithTitle:
[projectDict objectForKey:PCLanguage]];
// Project Description view
[descriptionField setStringValue:
@ -350,6 +357,10 @@
authorsItems = [projectDict objectForKey:PCAuthors];
[authorsList reloadData];
//Project Languages
languagesItems = [projectDict objectForKey:PCUserLanguages];
[languagesList reloadData];
// File Attributes
[fileIconView setDelegate:[project projectBrowser]];
@ -509,17 +520,17 @@
case 0: // Headers
[project setProjectDictObject:searchItems
forKey:PCSearchHeaders
notify:YES];
notify:YES];
break;
case 1: // Libraries
[project setProjectDictObject:searchItems
forKey:PCSearchLibs
notify:YES];
notify:YES];
break;
case 2: // Targets
[project setProjectDictObject:searchItems
forKey:PCBuilderTargets
notify:YES];
notify:YES];
return;
}
}
@ -543,7 +554,8 @@
// Languages
[projectLanguagePB removeAllItems];
[projectLanguagePB addItemsWithTitles: [projectDict objectForKey: PCUserLanguages]];
[projectLanguagePB addItemsWithTitles:
[projectDict objectForKey:PCUserLanguages]];
// Retain view
[projectAttributesView retain];
@ -554,7 +566,7 @@
NSLog(@"set current language to %@", [sender titleOfSelectedItem]);
[project setProjectDictObject:[sender titleOfSelectedItem]
forKey:PCLanguage
notify:NO];
notify:NO];
[[project projectWindow] setTitle];
}
@ -713,6 +725,94 @@
}
[projectLanguagesView retain];
[languagesList setDataSource:self];
}
- (void)addLanguage:(id)sender
{
NSString *language = [newLanguage stringValue];
[newLanguage setStringValue: @""];
//If there is a language and is new, add this
if (([language length] > 0) && (![languagesItems containsObject: language]))
{
//Add the language to the projectDict
[languagesItems addObject: language];
[project setProjectDictObject:languagesItems
forKey:PCUserLanguages
notify:YES];
/* If there are localizable resources, copy these into the new language
directory */
if ([[projectDict objectForKey:PCLocalizedResources] count] > 0)
{
NSString *file, *englishPath, *languagePath;
NSEnumerator *resources =
[[projectDict objectForKey:PCLocalizedResources] objectEnumerator];
englishPath = [project resourceDirForLanguage:@"English"];
languagePath = [project resourceDirForLanguage:language];
while ((file = [resources nextObject]))
{
if ([[projectManager fileManager] copyFile:file
fromDirectory:englishPath
intoDirectory:languagePath])
{
NSLog(@"file copied: %@", file);
}
}
}
}
}
- (void)removeLanguage:(id)sender
{
/* We don't remove the English language sice is needed if the app
isn't available at the end user language */
if (![[languagesItems objectAtIndex:
[languagesList selectedRow]] isEqualToString:@"English"])
{
NSString *language =
[languagesItems objectAtIndex:[languagesList selectedRow]];
NSString *languagePath = [project resourceDirForLanguage:language];
NSArray *resources = [projectDict objectForKey:PCLocalizedResources];
/* If there are localizable resources, remove these at the language
directory and the directory itsel */
if ([resources count] > 0)
{
if ([[projectManager fileManager] removeFiles:resources
fromDirectory:languagePath
removeDirsIfEmpty:YES])
{
NSLog(@"removed resources for language %@",language);
}
}
//Update the languages list
[languagesItems removeObject:language];
//If the removed language is the actual PCLanguage, set English
if ([[projectDict objectForKey: PCLanguage] isEqualToString:language])
{
NSLog(@"set current language to English");
[project setProjectDictObject:@"English"
forKey:PCLanguage
notify:NO];
}
//Update the projectDict
[project setProjectDictObject:languagesItems
forKey:PCUserLanguages
notify:YES];
}
else
{
NSRunAlertPanel(@"Remove Language",
@"You shouldn't remove language English",
@"Ok",nil,nil);
}
}
// ============================================================================
@ -787,18 +887,18 @@
enumerator = [files objectEnumerator];
while ((file = [enumerator nextObject]))
{
if (![[file pathExtension] isEqualToString:@"h"] &&
![[file pathExtension] isEqualToString:@"H"])
{
enable = NO;
}
}
{
if (![[file pathExtension] isEqualToString:@"h"] &&
![[file pathExtension] isEqualToString:@"H"])
{
enable = NO;
}
}
if (enable)
{
[publicHeaderButton setEnabled:YES];
}
{
[publicHeaderButton setEnabled:YES];
}
}
// --- Set state of buttons
@ -814,16 +914,16 @@
enumerator = [files objectEnumerator];
present_count = 0;
while ((file = [enumerator nextObject]))
{
if ([publicHeaders containsObject:file])
{
present_count++;
}
}
{
if ([publicHeaders containsObject:file])
{
present_count++;
}
}
if (array_count == present_count)
{
[publicHeaderButton setState:NSOnState];
}
{
[publicHeaderButton setState:NSOnState];
}
}
// Set state of Localized Resource button
@ -833,16 +933,16 @@
enumerator = [files objectEnumerator];
present_count = 0;
while ((file = [enumerator nextObject]))
{
if ([localizedResources containsObject:file])
{
present_count++;
}
}
{
if ([localizedResources containsObject:file])
{
present_count++;
}
}
if (array_count == present_count)
{
[localizableButton setState:NSOnState];
}
{
[localizableButton setState:NSOnState];
}
}
}
@ -881,7 +981,7 @@
}
/* PCLogInfo(self, @"{%@} file name changed from: %@ to: %@",
[project projectName], fileName, [fileNameField stringValue]);*/
[project projectName], fileName, [fileNameField stringValue]);*/
if ([project renameFile:fileName toFile:[fileNameField stringValue]] == NO)
{
@ -899,13 +999,13 @@
while ((file = [enumerator nextObject]))
{
if ([sender state] == NSOffState)
{
[project setHeaderFile:fileName public:NO];
}
{
[project setHeaderFile:fileName public:NO];
}
else
{
[project setHeaderFile:fileName public:YES];
}
{
[project setHeaderFile:fileName public:YES];
}
}
}
@ -919,13 +1019,13 @@
while ((file = [enumerator nextObject]))
{
if ([sender state] == NSOffState)
{
[project setResourceFile:file localizable:NO];
}
{
[project setResourceFile:file localizable:NO];
}
else
{
[project setResourceFile:file localizable:YES];
}
{
[project setResourceFile:file localizable:YES];
}
}
}
@ -952,6 +1052,10 @@
{
return [authorsItems count];
}
else if (languagesList != nil && aTableView == languagesList)
{
return [languagesItems count];
}
return 0;
}
@ -968,6 +1072,10 @@
{
return [authorsItems objectAtIndex:rowIndex];
}
else if (languagesList != nil && aTableView == languagesList)
{
return [languagesItems objectAtIndex:rowIndex];
}
return nil;
}
@ -975,15 +1083,15 @@
- (void) tableView:(NSTableView *)aTableView
setObjectValue:anObject
forTableColumn:(NSTableColumn *)aTableColumn
row:(int)rowIndex
row:(int)rowIndex
{
if (authorsList != nil && aTableView == authorsList)
{
if([authorsItems count] <= 0)
{
return;
}
{
return;
}
[authorsItems removeObjectAtIndex:rowIndex];
[authorsItems insertObject:anObject atIndex:rowIndex];

View file

@ -142,6 +142,7 @@ extern NSString *PCProjectBreakpointNotification;
- (NSArray *)publicHeaders;
- (void)setHeaderFile:(NSString *)file public:(BOOL)yn;
- (NSArray *)localizedResources;
- (NSString *)resourceDirForLanguage:(NSString *)language;
- (void)setResourceFile:(NSString *)file localizable:(BOOL)yn;
- (NSArray *)buildTargets;

View file

@ -5,7 +5,8 @@
Authors: Philippe C.D. Robert
Serg Stoyan
Riccardo Mottola
Riccardo Mottola
German Arias
This file is part of GNUstep.
@ -91,6 +92,9 @@
// Project Languages
IBOutlet NSBox *projectLanguagesView;
IBOutlet NSTableView *languagesList;
IBOutlet NSTextField *newLanguage;
NSMutableArray *languagesItems;
// File Attributes
IBOutlet NSBox *fileAttributesView;
@ -161,6 +165,8 @@
// ==== Project Languages
// ============================================================================
- (void)createProjectLanguages;
- (void)addLanguage:(id)sender;
- (void)removeLanguage:(id)sender;
// ============================================================================
// ==== File Attributes