#
# $Id: history.py,v 1.2 2003/11/28 21:34:59 mdb Exp $
# 
# lookuplet - a utility for quickly looking up information
# Copyright (C) 2001 Michael Bayne
# 
# 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.1 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.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

import gconf

class History:
    "Used to persistently maintain a history of entries for the \
    lookuplet query text field."

    # the maximum history size
    HISTORY_SIZE = 10;

    # the actual history entries
    history = [];

    #
    # Loads up the history from persistent preferences and prepares for
    # operation.
    #
    def __init__ (self):
#         gnome.config.push_prefix("/lookuplet/");
#         count = gnome.config.get_int("lookuplet/history/count");
#         for h in range(0, count):
#             self.history.append(gnome.config.get_string(
#                 "lookuplet/history/entry_%.2u" % h));
#             # print "loaded %d: %s" % (h, self.history[h]);
#         gnome.config.pop_prefix();
        return;

    #
    # Adds an entry to the history.
    #
    def append (self, entry):
        # if this entry is already in the history list, we simply want to
        # move it to the end
        if (entry in self.history):
            self.history.remove(entry);

        # add our entry
        self.history.append(entry);

        # trim the history if it's too big
        if (len(self.history) > self.HISTORY_SIZE):
            self.history.pop(0);

        # flush our config to the configuration repository
#         gnome.config.push_prefix("/lookuplet/");
#         count = len(self.history);
#         gnome.config.set_int("lookuplet/history/count", count);
#         for h in range(0, count):
#             gnome.config.set_string(
#                 "lookuplet/history/entry_%.2u" % h, self.history[h]);
#             # print "wrote %d: %s" % (h, self.history[h]);
#         gnome.config.sync();
#         gnome.config.drop_all();
#         gnome.config.pop_prefix();

    #
    # Scans back from one before the specified index looking for a history
    # entry that matches the specified prefix, returning its index if one
    # is found or -1 if one is not.
    #
    def match (self, prefix, index):
        count = len(self.history);
        for offset in range(1, count+1):
            # do some funny math to always ensure a positive value
            pos = (index - offset + count) % count;
            # print "scanning %s for %s." % (self.history[pos], prefix);
            if (self.history[pos].find(prefix) == 0):
                # print "found it at %d." % pos;
                return pos;
        # print "didn't find it.";
        return -1;
