TrackManager.h
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:2k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /*  cdrdao - write audio CD-Rs in disc-at-once mode
  2.  *
  3.  *  Copyright (C) 1998  Andreas Mueller <mueller@daneb.ping.de>
  4.  *
  5.  *  This program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2 of the License, or
  8.  *  (at your option) any later version.
  9.  *
  10.  *  This program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  *  GNU General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with this program; if not, write to the Free Software
  17.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19. /*
  20.  * $Log: TrackManager.h,v $
  21.  * Revision 1.1  1998/11/20 18:56:46  mueller
  22.  * Initial revision
  23.  *
  24.  */
  25. #ifndef __TRACK_MANAGER_H
  26. #define __TRACK_MANAGER_H
  27. #include <glib.h>
  28. class Toc;
  29. class Track;
  30. class TrackManager {
  31. public:
  32.   struct Entry {
  33.     Entry(const Track *t, int tn, int in, gint x) {
  34.       track = t; trackNr = tn; indexNr = in; xpos = x;
  35.       extend = 0; drawn = 1; selected = 0;
  36.     }
  37.     const Track *track;
  38.     int trackNr;
  39.     int indexNr;
  40.     gint xpos;
  41.     unsigned int extend : 1;
  42.     unsigned int drawn : 1;
  43.     unsigned int selected : 1;
  44.   };
  45.   TrackManager(gint trackMarkerWidth);
  46.   ~TrackManager();
  47.   void update(const Toc *, unsigned long start, unsigned long end, gint width);
  48.   // returns entry that is picked at given x-postion
  49.   const Entry *pick(gint x, gint *stopXMin, gint *stopXMax); 
  50.   // selects given entry, use 'NULL' to unselect all
  51.   void select(const Entry *);
  52.   // selected entry with specified track/index
  53.   void select(int trackNr, int indexNr);
  54.   // iterates entries
  55.   const Entry *first();
  56.   const Entry *next();
  57. private:
  58.   struct EntryList {
  59.     Entry *ent;
  60.     EntryList *next;
  61.   };
  62.   gint trackMarkerWidth_;
  63.   gint width_;
  64.   EntryList *entries_;
  65.   EntryList *lastEntry_;
  66.   EntryList *iterator_;
  67.   void clear();
  68.   void append(Entry *);
  69. };
  70. #endif