Programování na Macu - Aplikace pro kontrolu nové pošty (3) - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Jaký fotograf/ka získal/a cenu za nejpopulárnější příspěvek v Nikon Photo Contest?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

Programování na Macu - Aplikace pro kontrolu nové pošty (3)

27. prosince 2007, 09.00 | V tomto díle seriálu se blíže podíváme na práci s objektovou databází a na model

MVC (model-view-controller), jenž je základem aplikací s uživatelským rozhraním

založených na Cocoa.

Práce s objektovou databází

Nejprve si na stránce www.db4objects.com stáhněte databázi (verzi pro Javu). Přejmenujte .jar soubor pro Javu 5 na db4o.jar a přidejte jej do projektu stejně jako dříve obrázek pro ikonku. Poté jej přetáhněte do "Targets > Email Notifer > Copy Bundle Resources", aby byla tato knihovna přístupná pro spuštěný program.
Vytvořme nyní třídu pro nastavení, jejíž instance bude uložena v databázi. Do záložky "Classes" přidejte soubor Preferences.java s tímto obsahem:

public class Preferences {

    protected String host;
    protected int port;
    protected String userName;
    protected String password;
   
    public Preferences() {
        host = "pop3.seznam.cz";
        port = 110;
    }
   
    public String getHost() {
        return host;
    }
   
    public int getPort() {
        return port;
    }
   
    public String getUserName() {
        return userName;
    }
   
    public void setUserName(String u) {
        userName = u;
    }
   
    public String getPassword() {
        return password;
    }
   
    public void setPassword(String p) {
        password = p;
    }

Dále upravte soubor JavaInterfaces.h:

@interface Test : NSObject
{}
- (void)write:(NSString*)msg;
@end

a AppController.h:

#import <Cocoa/Cocoa.h>
#import "JavaInterfaces.h"

@interface AppController : NSObject
{
    NSStatusItem* statusItem;
    Test* javaController;
}
- (NSMenu*)createMenu;
@end

Zde jsme nadeklarovali vlastnost javaController, která bude obsahovat instanci javovské třídy Test.
Do souboru AppController.m také přidáme kód:

#import "AppController.h"

@implementation AppController
- (void)awakeFromNib {
    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength: NSVariableStatusItemLength] retain];
    [statusItem setHighlightMode: YES];
    [statusItem setImage: [NSImage imageNamed: @"small"]];
    [statusItem setMenu: [self createMenu]];
   
    javaController = NSJavaObjectNamedInPath(@"Test", nil);
}

- (NSMenu*)createMenu {
    NSMenu* menu = [[NSMenu alloc] initWithTitle: @"Email Notifier"];
   
    NSMenuItem* item = [[NSMenuItem alloc] initWithTitle: @"Info..." action: @selector(about) keyEquivalent: @""];
    [item setTarget: self];
    [menu addItem: item];
   
    [menu addItem: [NSMenuItem separatorItem]];
   
    item = [[NSMenuItem alloc] initWithTitle: @"Quit" action: @selector(exit) keyEquivalent: @""];
    [item setTarget: self];
    [menu addItem: item];
   
    return menu;
}

- (void)dealloc {
    [statusItem release];
    [javaController release];
    [super dealloc];
}

- (void)about {
    [NSApp activateIgnoringOtherApps: YES];
    [NSApp orderFrontStandardAboutPanel: self];
}

- (void)exit {
    [NSApp terminate: nil];
}
@end

Při spuštění aplikace vytvoříme novou instanci třídy Test a při rušení instance controlleru ji zase uvolníme.
Ještě upravíme soubor Test.java:

import com.db4o.*;

public class Test {

    protected ObjectContainer db;
    protected Preferences prefs;
   
    public Test() {
        db = Db4o.openFile("email_notifier.yap");
        ObjectSet<Preferences> result = db.get(new Preferences());
        if (result.size() > 0) {
            prefs = result.get(0);
        } else {
            prefs = new Preferences();
            db.set(prefs);
            db.commit();
        }
    }
   
    public void write(String msg) {
        System.out.println(msg);
    }

}

Metodu write už potřebovat nebudeme. Konstruktor třídy Test otevře objektovou databázi ze souboru email_notifier.yap. Pokud databáze neexistuje, je automaticky vytvořena. Dále se pokusíme získat objekt typu Preferences. Pokud existuje, je vše v pořádku a zapamatujeme si odkaz na něj. Pokud neexistuje, vytvoříme novou instanci a uložíme ji do databáze. Nesmíme zapomenout na commit, aby se změny zapsaly do databáze natrvalo.
Aby vám šel projekt zkompilovat, upravte ještě soubor Info.plist:

<key>NSJavaPath</key>
<array>
    <string>JavaClasses.jar</string>
    <string>db4o.jar</string>
</array>

Jak je vidět, je práce s objektovou databází velice jednoduchá. V dalším díle naimplementujeme ukládání preferencí.

Provázání ovládacích prvků a kódu

Přepněte se do Interface Builderu. V hlavním okně v záložce "Classes" klikněte na AppController a v inspektoru vytvořte dva nové outlety: userName a password (klikněte na tlačítko "Add" a zadejte jméno outletu).
Typ outletu userName nastavte na NSTextField a outletu password na NSSecureTextField. Dále vytvořte outlet prefsPanel a nastavte jeho typ na NSPanel. Tento outlet bude reprezentovat okno preferencí.
Dále klikněte na záložku "Actions" a vytvořte akce save a close.
Ještě musíme propojit controller s prvky uživatelského rozhraní. Klikněte na instanci AppController (modrá krychle), stiskněte Ctrl a táhněte myší na textové pole pro uživatelské jméno. V inspektoru vyberte outlet userName a klikněte na tlačítko "Connect". Stejným způsobem propojte outlet password s příslušným textovým polem a outlet prefsPanel s instancí okna.
Dále klikněte na tlačítko "Close", stiskněte Ctrl a táhněte myší na AppController. Vyberte akci close a klikněte na tlačítko "Connect". Stejně propojte tlačítko "Save" s akcí save.
Ještě zbývá rozšířit kód controlleru. Vraťte se do Xcode a upravte soubor AppController.h:

#import <Cocoa/Cocoa.h>
#import "JavaInterfaces.h"

@interface AppController : NSObject
{
    NSStatusItem* statusItem;
    Test* javaController;
   
    IBOutlet NSSecureTextField *password;
    IBOutlet NSPanel *prefsPanel;
    IBOutlet NSTextField *userName;
}
- (NSMenu*)createMenu;

- (IBAction)save:(id)sender;
- (IBAction)close:(id)sender;
@end

Soubor AppController.m rozšíříme o dvě metody:

- (IBAction)save:(id)sender
{
}

- (IBAction)close:(id)sender
{
    [prefsPanel close];
}

Metodu save si nadefinujeme později. Metoda close pošle instanci prefsPanel zprávu close, což způsobí zavření panelu preferencí. To si teď můžete vyzkoušet sami, klikněte na "Build and Go" a po spuštění aplikace na "Close".
Velkou část aplikace máme nyní hotovou a příště se konečně dostaneme ke stahování pošty.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: