73bdf0c3ad
Melisma are not affected by this patch and still can cross barlines Shapes change hack makes horizontal spacing apply only for the specified spacing type even in case of zero-width shape. That way chord symbols can cross barlines again.
82 lines
2.7 KiB
C++
82 lines
2.7 KiB
C++
//=============================================================================
|
|
// MuseScore
|
|
// Music Composition & Notation
|
|
//
|
|
// Copyright (C) 2011 Werner Schweer
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License version 2
|
|
// as published by the Free Software Foundation and appearing in
|
|
// the file LICENCE.GPL
|
|
//=============================================================================
|
|
|
|
#ifndef __SEGMENTLIST_H__
|
|
#define __SEGMENTLIST_H__
|
|
|
|
#include "segment.h"
|
|
|
|
namespace Ms {
|
|
|
|
class Segment;
|
|
|
|
//---------------------------------------------------------
|
|
// SegmentList
|
|
//---------------------------------------------------------
|
|
|
|
class SegmentList {
|
|
Segment* _first; ///< First item of segment list
|
|
Segment* _last; ///< Last item of segment list
|
|
int _size; ///< Number of items in segment list
|
|
|
|
public:
|
|
SegmentList() { clear(); }
|
|
void clear() { _first = _last = 0; _size = 0; }
|
|
#ifndef NDEBUG
|
|
void check();
|
|
#else
|
|
void check() {}
|
|
#endif
|
|
SegmentList clone() const;
|
|
int size() const { return _size; }
|
|
|
|
Segment* first() const { return _first; }
|
|
Segment* first(SegmentType) const;
|
|
Segment* first(ElementFlag) const;
|
|
|
|
Segment* last() const { return _last; }
|
|
Segment* firstCRSegment() const;
|
|
void remove(Segment*);
|
|
void push_back(Segment*);
|
|
void push_front(Segment*);
|
|
void insert(Segment* e, Segment* el); // insert e before el
|
|
|
|
class iterator {
|
|
Segment* p;
|
|
public:
|
|
iterator(Segment* s) { p = s; }
|
|
iterator operator++() { iterator i(p); p = p->next(); return i; }
|
|
bool operator !=(const iterator& i) const { return p != i.p; }
|
|
Segment& operator*() { return *p; }
|
|
};
|
|
class const_iterator {
|
|
const Segment* p;
|
|
public:
|
|
const_iterator(const Segment* s) { p = s; }
|
|
const_iterator operator++() { const_iterator i(p); p = p->next(); return i; }
|
|
bool operator !=(const const_iterator& i) const { return p != i.p; }
|
|
const Segment& operator*() const { return *p; }
|
|
};
|
|
|
|
iterator begin() { return _first; }
|
|
iterator end() { return 0; }
|
|
const_iterator begin() const { return _first; }
|
|
const_iterator end() const { return 0; }
|
|
};
|
|
|
|
// Segment* begin(SegmentList& l) { return l.first(); }
|
|
// Segment* end(SegmentList&) { return 0; }
|
|
|
|
|
|
} // namespace Ms
|
|
#endif
|
|
|