KerberosLifetimeSlider.m [plain text]
/*
* KerberosLifetimeSlider.m
*
* $Header$
*
* Copyright 2004 Massachusetts Institute of Technology.
* All Rights Reserved.
*
* Export of this software from the United States of America may
* require a specific license from the United States Government.
* It is the responsibility of any person or organization contemplating
* export to obtain such a license before exporting.
*
* WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
* distribute this software and its documentation for any purpose and
* without fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright notice and
* this permission notice appear in supporting documentation, and that
* the name of M.I.T. not be used in advertising or publicity pertaining
* to distribution of the software without specific, written prior
* permission. Furthermore if you modify this software you must label
* your software as modified software and not distribute it in such a
* fashion that it might be confused with the original M.I.T. software.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is" without express
* or implied warranty.
*/
#import "KerberosLifetimeSlider.h"
#import "KerberosLifetimeFormatter.h"
void SetupLifetimeSlider (NSSlider *slider,
NSTextField *textField,
time_t minimum,
time_t maximum,
time_t value)
{
time_t min = minimum;
time_t max = maximum;
time_t increment = 0;
if (max < min) {
// swap values
time_t temp = max;
max = min;
min = temp;
}
int range = max - min;
if (range < 5*60) { increment = 1; // 1 second if under 5 minutes
} else if (range < 30*60) { increment = 5; // 5 seconds if under 30 minutes
} else if (range < 60*60) { increment = 15; // 15 seconds if under 1 hour
} else if (range < 2*60*60) { increment = 30; // 30 seconds if under 2 hours
} else if (range < 5*60*60) { increment = 60; // 1 minute if under 5 hours
} else if (range < 50*60*60) { increment = 5*60; // 5 minutes if under 50 hours
} else if (range < 200*60*60) { increment = 15*60; // 15 minutes if under 200 hours
} else if (range < 500*60*60) { increment = 30*60; // 30 minutes if under 500 hours
} else { increment = 60*60; } // 1 hour otherwise
int roundedMinimum = (min / increment) * increment;
if (roundedMinimum > min) { roundedMinimum -= increment; }
if (roundedMinimum <= 0) { roundedMinimum += increment; } // ensure it is positive
int roundedMaximum = (max / increment) * increment;
if (roundedMaximum < max) { roundedMaximum += increment; }
int roundedValue = (value / increment) * increment;
if (roundedValue < roundedMinimum) { roundedValue = roundedMinimum; }
if (roundedValue > roundedMaximum) { roundedValue = roundedMaximum; }
if (roundedMinimum == roundedMaximum) {
[textField setTextColor: [NSColor grayColor]];
[slider setEnabled: FALSE];
} else {
[textField setTextColor: [NSColor blackColor]];
[slider setEnabled: TRUE];
}
// Attach the formatter to the slider
NSDateFormatter *lifetimeFormatter = [[KerberosLifetimeFormatter alloc] initWithControlMinimum: roundedMinimum
controlIncrement: increment];
[textField setFormatter: lifetimeFormatter];
[lifetimeFormatter release]; // the textField will retain it
[slider setMinValue: 0];
[slider setMaxValue: (roundedMaximum - roundedMinimum) / increment];
[slider setIntValue: (roundedValue - roundedMinimum) / increment];
[textField takeObjectValueFrom: slider];
}