/*
 * Copyright (C) 2009-2011 Freescale Semiconductor, Inc. All rights reserved.
 *
 */

/*
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

#ifndef SEEKTODIALOG_H_
#define SEEKTODIALOG_H_

typedef struct
{
  GtkWidget *dialog;
  GtkWidget *time;
  GtkWidget *accurate;
} SeekToDialog;

SeekToDialog *seekto_dialog_create(void);
void seekto_dialog_destroy(SeekToDialog *seekto);
gint seekto_dialog_run(SeekToDialog *seekto);
void seekto_dialog_get_time(SeekToDialog *seekto, gchar *str);
gboolean seekto_dialog_get_accurate(SeekToDialog *seekto);

#endif /* SEEKTODIALOG_H_ */
