This is Printers.m in view mode; [Download] [Up]
/* SambaManger. A graphical frontend to configure the NetInfo enhanced samba. Copyright (C) 1998 Robert Frank This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Robert Frank, frank@ifi.unibas.ch */ #import "Printers.h" #import "Controller.h" #import "NIDirectory.h" #import "NIProperty.h" #import "NetInfoKeys.h" // The property names of a printer's directory: #define P_NAME "name" #define P_SAMBANAME "netbios name" #define P_COMMENT "note" #define P_REMOTE "rm" #define P_COMMDIR "Comm" #define P_COMMHOST "HostName" #define P_SHAREDAS "sharedAs" #define P_PRINTERDRIVER "nt printer driver" #define P_PRINTCOMMAND "print command" #define P_LPRMCOMMAND "lprm command" #define P_LPQCOMMAND "lpq command" #define P_LPRESUMECOMMAND "lp resume command" #define P_LPPAUSECOMMAND "lp pause command" // Class variable with the string for the open/save panel's title. static const char *title; @implementation Printers // ************************************************************************ // Class methods: + initialize // Called once by the run time system { title = [Service stringFor:"Title:Printers"]; return self; } + new:sender at:(NXCoord *)offset { NIDirectory *NIDir; Printers *printer = [Printers alloc]; if ((NIDir = [NIDirectory new:sender root:SMNI_PRINTERS directory:NULL])) { [NIDir setDelegate:printer]; if ([printer init:sender dirObj:NIDir delta:offset service:NULL]) { [NIDir setSaveTitle:title]; return printer; } [NIDir close]; } return [printer free]; } + open:sender at:(NXCoord *)offset { NIDirectory *NIDir; Printers *printer = [Printers alloc]; if ((NIDir = [NIDirectory open:sender root:SMNI_PRINTERS withTitle:title])) { [NIDir setDelegate:printer]; if ([printer init:sender dirObj:NIDir delta:offset service:[NIDir baseName]]) return printer; [NIDir close]; } return [printer free]; } // ************************************************************************ // Methods: - (BOOL)minimumOK { const char *name = [textSambaName stringValue]; if (strlen(name) > 15) { NXRunAlertPanel(getString("Alert:Alert"), getString("Message:Samba Name may have atmost 15 characters."), getString("Button:OK"),NULL,NULL); return NO; } if (*name && (strchr(name, '.') || strchr(name, ' '))) { NXRunAlertPanel(getString("Alert:Alert"), getString("Message:Samba Name may not contain dots or spaces."), getString("Button:OK"),NULL,NULL); return NO; } return YES; } - setupAndLoad { ni_id cdir; ni_proplist lprops; int i; BOOL showNote = NO; const char *sharedName; NIProperty *remoteDir, *sharedDir, *sambaNameDir; sambaNameDir = [ni_dirObj addString:P_SAMBANAME outlet:textSambaName]; [ni_dirObj addString:P_NAME outlet:textUnixName]; [ni_dirObj addString:P_COMMENT outlet:textComment]; [ni_dirObj addString:P_PRINTERDRIVER outlet:textDriver]; [ni_dirObj addString:P_PRINTCOMMAND outlet:textPrint]; [ni_dirObj addString:P_LPRMCOMMAND outlet:textDelete]; [ni_dirObj addString:P_LPQCOMMAND outlet:textShowQueue]; [ni_dirObj addString:P_LPPAUSECOMMAND outlet:textResume]; [ni_dirObj addString:P_LPRESUMECOMMAND outlet:textPause]; remoteDir = [ni_dirObj addProperty:P_REMOTE]; sharedDir = [ni_dirObj addProperty:P_SHAREDAS]; // Check for a subdirectory P_COMMDIR with the property P_COMMHOST. cdir = [ni_dirObj directoryID]; if (ni_pathsearch([ni_dirObj handle], &cdir, P_COMMDIR) == NI_OK) if ((ni_read([ni_dirObj handle], &cdir, &lprops)) == NI_OK) { for (i = 0; i < lprops.ni_proplist_len; i++) showNote|= !strcmp(P_COMMHOST, lprops.ni_proplist_val[i].nip_name); ni_proplist_free(&lprops); } // Scan the loaded NetInfo values and update the GUI. [ni_dirObj scan]; showNote|= [remoteDir values]; sharedName = [sharedDir valueAt:0]; if (*sharedName && !*[sambaNameDir valueAt:0]) { [sambaNameDir insertValue:sharedName]; [textSambaName setStringValue:sharedName]; } [textUnixName setEditable:NO]; [textSambaName selectText:self]; // We found an entry of a network printer. This could be attached to // a NetInfo host or be a stand alone network printer. In the first // case it would be better to run Samba on the host to which the printer // is physically attatched, in the second case it would be better to // declare the printer from within Windows. if (showNote) { // Run a modal for the panel. [NXApp runModalFor:notePanel]; [notePanel close]; } return self; } // Actions from the note panel - noteOK:sender { [NXApp stopModal]; return self; } // ************************************************************************ // Actions: // ************************************************************************ // Delegates: @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.