本文整理汇总了C++中CItemList类的典型用法代码示例。如果您正苦于以下问题:C++ CItemList类的具体用法?C++ CItemList怎么用?C++ CItemList使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CItemList类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getItemlistForCurrentPart
CItem* EventCanvas::getRightMostSelected()
{
iCItem i, iRightmost;
CItem* rightmost = NULL;
// get a list of items that belong to the current part
// since multiple parts have populated the _items list
// we need to filter on the actual current Part!
CItemList list = _items;
if(multiPartSelectionAction && !multiPartSelectionAction->isChecked())
list = getItemlistForCurrentPart();
//CItemList list = getItemlistForCurrentPart();
//Get the rightmost selected note (if any)
i = list.begin();
while (i != list.end())
{
if (i->second->isSelected())
{
iRightmost = i;
rightmost = i->second;
}
++i;
}
return rightmost;
}
示例2: getLeftMostSelected
CItem* EventCanvas::getLeftMostSelected()
{
iCItem i, iLeftmost;
CItem* leftmost = NULL;
// get a list of items that belong to the current part
// since multiple parts have populated the _items list
// we need to filter on the actual current Part!
//CItemList list = getItemlistForCurrentPart();
CItemList list = _items;
if(multiPartSelectionAction && !multiPartSelectionAction->isChecked())
list = getItemlistForCurrentPart();
if (list.size() > 0)
{
i = list.end();
while (i != list.begin())
{
--i;
if (i->second->isSelected())
{
iLeftmost = i;
leftmost = i->second;
}
}
}
return leftmost;
}
示例3:
QList<Event> AbstractMidiEditor::getSelectedEvents()/*{{{*/
{
QList<Event> rv;
if(canvas)
{
CItemList list = canvas->getSelectedItemsForCurrentPart();
for (iCItem k = list.begin(); k != list.end(); ++k)
{
NEvent* nevent = (NEvent*) (k->second);
Event event = nevent->event();
if (event.type() != Note)
continue;
rv.append(event);
}
}
return rv;
}/*}}}*/
示例4: getItemlistForPart
void EventCanvas::populateMultiSelect(CItem* baseItem)/*{{{*/
{
if(editor->isGlobalEdit() && baseItem)
{
PartList* pl = editor->parts();
int curTranspose = ((MidiTrack*)baseItem->part()->track())->getTransposition();
Event curEvent = baseItem->event();
int curPitch = curEvent.pitch();
int curRawPitch = curPitch - curTranspose;
//int curLen = curEvent.lenTick();
m_multiSelect.clear();
for(iPart p = pl->begin(); p != pl->end(); ++p)
{
if(p->second == _curPart)
continue;
CItemList pitems = getItemlistForPart(p->second);
for (iCItem i = pitems.begin(); i != pitems.end(); ++i)
{
MidiTrack* mtrack = (MidiTrack*)i->second->part()->track();
int transp = mtrack->getTransposition();
Event e = i->second->event();
if(e.empty())
continue;
int pitch = e.pitch();
int rpitch = pitch - transp;
//int len = e.lenTick();
//printf("Current pitch: %d, rawpitch: %d - note pitch: %d, raw: %d\n", curPitch, curRawPitch, pitch, rpitch);
if(e.tick() == curEvent.tick() && rpitch == curRawPitch/*, len == curLen*/)
{
m_multiSelect.add(i->second);
break;
}
}
}
//printf("MultiSelect list size: %d \n", (int)m_multiSelect.size());
}
}/*}}}*/
示例5: switch
void EventCanvas::actionCommand(int action)/*{{{*/
{
switch(action)
{
case LOCATORS_TO_SELECTION:
{
int tick_max = 0;
int tick_min = INT_MAX;
bool found = false;
for (iCItem i = _items.begin(); i != _items.end(); i++)
{
if (!i->second->isSelected())
continue;
int tick = i->second->x();
int len = i->second->event().lenTick();
found = true;
if (tick + len > tick_max)
tick_max = tick + len;
if (tick < tick_min)
tick_min = tick;
}
if (found)
{
Pos p1(tick_min, true);
Pos p2(tick_max, true);
song->setPos(1, p1);
song->setPos(2, p2);
}
}
break;
case SEL_RIGHT ... SEL_RIGHT_ADD:
{
if (action == SEL_RIGHT && allItemsAreSelected())
{
deselectAll();
selectAtTick(song->cpos());
return;
}
iCItem i, iRightmost;
CItem* rightmost = NULL;
// get a list of items that belong to the current part
// since multiple parts have populated the _items list
// we need to filter on the actual current Part!
CItemList list = _items;
if(multiPartSelectionAction && !multiPartSelectionAction->isChecked())
list = getItemlistForCurrentPart();
//Get the rightmost selected note (if any)
i = list.begin();
while (i != list.end())
{
if (i->second->isSelected())
{
iRightmost = i;
rightmost = i->second;
}
++i;
}
if (rightmost)
{
iCItem temp = iRightmost;
temp++;
//If so, deselect current note and select the one to the right
if (temp != list.end())
{
if (action != SEL_RIGHT_ADD)
deselectAll();
iRightmost++;
iRightmost->second->setSelected(true);
itemPressed(iRightmost->second);
m_tempPlayItems.append(iRightmost->second);
QTimer::singleShot(NOTE_PLAY_TIME, this, SLOT(playReleaseForItem()));
if(editor->isGlobalEdit())
populateMultiSelect(iRightmost->second);
updateSelection();
}
}
else // there was no item selected at all? Then select nearest to tick if there is any
{
selectAtTick(song->cpos());
updateSelection();
}
}
break;
case SEL_LEFT ... SEL_LEFT_ADD:
{
if (action == SEL_LEFT && allItemsAreSelected())
{
deselectAll();
selectAtTick(song->cpos());
return;
}
iCItem i, iLeftmost;
//.........这里部分代码省略.........
示例6: AddNextSentItem
/*****************************************************************************
* CTTSEngObj::AddNextSentItem *
*-----------------------------*
* Locates the next sentence item in the stream and adds it to the list.
* Returns true if the last item added is the end of the sentence.
****************************************************************************/
BOOL CTTSEngObj::AddNextSentItem( CItemList& ItemList )
{
//--- Get the token
ULONG ulIndex;
CSentItem Item;
Item.pItem = FindNextToken( m_pNextChar, m_pEndChar, m_pNextChar );
//--- This case can occur when we hit the end of a text fragment.
// Returning at this point will cause advancement to the next fragment.
if( Item.pItem == NULL )
{
return false;
}
const WCHAR* pTrailChar = m_pNextChar-1;
ULONG TokenLen = m_pNextChar - Item.pItem;
//--- Split off leading punction if any
static const WCHAR LeadItems[] = { L'(', L'\"', L'{', L'\'', L'[' };
while( TokenLen > 1 )
{
if( SearchSet( Item.pItem[0], LeadItems, sp_countof(LeadItems), &ulIndex ) )
{
CSentItem LItem;
LItem.pItem = Item.pItem;
LItem.ulItemLen = 1;
LItem.pXmlState = &m_pCurrFrag->State;
LItem.ulItemSrcLen = LItem.ulItemLen;
LItem.ulItemSrcOffset = m_pCurrFrag->ulTextSrcOffset +
( LItem.pItem - m_pCurrFrag->pTextStart );
ItemList.AddTail( LItem );
++Item.pItem;
--TokenLen;
}
else
{
break;
}
}
//--- Get primary item insert position
SPLISTPOS ItemPos = ItemList.AddTail( Item );
//--- Split off trailing punction if any.
static const WCHAR EOSItems[] = { L'.', L'!', L'?' };
static const WCHAR TrailItems[] = { L',', L'\"', L';', L':', L')', L'}', L'\'', L']' };
SPLISTPOS NextPos = NULL;
BOOL fIsEOS = false;
while( TokenLen > 1 )
{
BOOL fAddTrailItem = false;
if( SearchSet( *pTrailChar, EOSItems, sp_countof(EOSItems), &ulIndex ) )
{
fIsEOS = true;
fAddTrailItem = true;
}
else if( SearchSet( *pTrailChar, TrailItems, sp_countof(TrailItems), &ulIndex ) )
{
fAddTrailItem = true;
}
if( fAddTrailItem )
{
CSentItem TItem;
TItem.pItem = pTrailChar;
TItem.ulItemLen = 1;
TItem.pXmlState = &m_pCurrFrag->State;
TItem.ulItemSrcLen = TItem.ulItemLen;
TItem.ulItemSrcOffset = m_pCurrFrag->ulTextSrcOffset +
( TItem.pItem - m_pCurrFrag->pTextStart );
NextPos = ItemList.InsertAfter( ItemPos, TItem );
--TokenLen;
--pTrailChar;
}
else
{
break;
}
}
//--- Abreviation or sentence end?
// If we are at the end of the buffer then EOS is implied.
if( *m_pNextChar == NULL )
{
fIsEOS = true;
if( !SearchSet( *(m_pNextChar-1), EOSItems, sp_countof(EOSItems), &ulIndex ) )
{
//--- Terminate with a period if we are at the end of a buffer
// and no end of sentence punction has been added.
static const WCHAR* pPeriod = L".";
CSentItem EOSItem;
EOSItem.pItem = pPeriod;
EOSItem.ulItemLen = 1;
EOSItem.pXmlState = &m_pCurrFrag->State;
//.........这里部分代码省略.........
示例7: GetNextSentence
/*****************************************************************************
* CTTSEngObj::GetNextSentence *
*-----------------------------*
* This method is used to create a list of items to be spoken.
****************************************************************************/
HRESULT CTTSEngObj::GetNextSentence( CItemList& ItemList )
{
HRESULT hr = S_OK;
//--- Clear the destination
ItemList.RemoveAll();
//--- Is there any work to do
if( m_pCurrFrag == NULL )
{
hr = S_FALSE;
}
else
{
BOOL fSentDone = false;
BOOL fGoToNextFrag = false;
while( m_pCurrFrag && !fSentDone )
{
if( m_pCurrFrag->State.eAction == SPVA_Speak )
{
fSentDone = AddNextSentItem( ItemList );
//--- Advance fragment?
if( m_pNextChar >= m_pEndChar )
{
fGoToNextFrag = true;
}
}
else
{
//--- Add non spoken fragments
CSentItem Item;
Item.pItem = m_pCurrFrag->pTextStart;
Item.ulItemLen = m_pCurrFrag->ulTextLen;
Item.ulItemSrcOffset = m_pCurrFrag->ulTextSrcOffset;
Item.ulItemSrcLen = Item.ulItemLen;
Item.pXmlState = &m_pCurrFrag->State;
ItemList.AddTail( Item );
fGoToNextFrag = true;
}
if( fGoToNextFrag )
{
fGoToNextFrag = false;
m_pCurrFrag = m_pCurrFrag->pNext;
if( m_pCurrFrag )
{
m_pNextChar = m_pCurrFrag->pTextStart;
m_pEndChar = m_pNextChar + m_pCurrFrag->ulTextLen;
}
else
{
m_pNextChar = NULL;
m_pEndChar = NULL;
}
}
} // end while
if( ItemList.IsEmpty() )
{
hr = S_FALSE;
}
}
return hr;
} /* CTTSEngObj::GetNextSentence */
示例8: OutputSentence
/*****************************************************************************
* CTTSEngObj::OutputSentence *
*----------------------------*
* This method is used to output an item list.
****************************************************************************/
HRESULT CTTSEngObj::OutputSentence( CItemList& ItemList, ISpTTSEngineSite* pOutputSite )
{
HRESULT hr = S_OK;
ULONG WordIndex;
//--- Lookup words in our voice
SPLISTPOS ListPos = ItemList.GetHeadPosition();
while( ListPos && !(pOutputSite->GetActions() & SPVES_ABORT) )
{
CSentItem& Item = ItemList.GetNext( ListPos );
//--- Process sentence items
switch( Item.pXmlState->eAction )
{
//--- Speak some text ---------------------------------------
case SPVA_Speak:
{
//--- We don't say anything for punctuation or control characters
// in this sample.
if( iswalpha( Item.pItem[0] ) || iswdigit( Item.pItem[0] ) )
{
//--- Lookup the word, if we can't find it just use the first one
for( WordIndex = 0; WordIndex < m_ulNumWords; ++WordIndex )
{
if( ( m_pWordList[WordIndex].ulTextLen == Item.ulItemLen ) &&
( !wcsnicmp( m_pWordList[WordIndex].pText, Item.pItem, Item.ulItemLen )) )
{
break;
}
}
if( WordIndex == m_ulNumWords )
{
WordIndex = 0;
}
//--- Queue the event
CSpEvent Event;
Event.eEventId = SPEI_WORD_BOUNDARY;
Event.elParamType = SPET_LPARAM_IS_UNDEFINED;
Event.ullAudioStreamOffset = m_ullAudioOff;
Event.lParam = Item.ulItemSrcOffset;
Event.wParam = Item.ulItemSrcLen;
hr = pOutputSite->AddEvents( &Event, 1 );
//--- Queue the audio data
hr = pOutputSite->Write( m_pWordList[WordIndex].pAudio,
m_pWordList[WordIndex].ulNumAudioBytes,
NULL );
//--- Update the audio offset
m_ullAudioOff += m_pWordList[WordIndex].ulNumAudioBytes;
}
}
break;
//--- Output some silence for a pause -----------------------
case SPVA_Silence:
{
BYTE Buff[1000];
memset( Buff, 0, 1000 );
ULONG NumSilenceBytes = Item.pXmlState->SilenceMSecs * 22;
//--- Queue the audio data in chunks so that we can get
// interrupted if necessary.
while( !(pOutputSite->GetActions() & SPVES_ABORT) )
{
if( NumSilenceBytes > 1000 )
{
hr = pOutputSite->Write( Buff, 1000, NULL );
NumSilenceBytes -= 1000;
}
else
{
hr = pOutputSite->Write( Buff, NumSilenceBytes, NULL );
break;
}
}
//--- Update the audio offset
m_ullAudioOff += NumSilenceBytes;
}
break;
//--- Fire a bookmark event ---------------------------------
case SPVA_Bookmark:
{
//--- The bookmark is NOT a null terminated string in the Item, but we need
//--- to convert it to one. Allocate enough space for the string.
WCHAR * pszBookmark = (WCHAR *)_alloca((Item.ulItemLen + 1) * sizeof(WCHAR));
memcpy(pszBookmark, Item.pItem, Item.ulItemLen * sizeof(WCHAR));
pszBookmark[Item.ulItemLen] = 0;
//--- Queue the event
SPEVENT Event;
Event.eEventId = SPEI_TTS_BOOKMARK;
Event.elParamType = SPET_LPARAM_IS_STRING;
//.........这里部分代码省略.........
示例9: SPDBG_FUNC
/*****************************************************************************
* CTTSEngObj::Speak *
*-------------------*
* Description:
* This is the primary method that SAPI calls to render text.
*-----------------------------------------------------------------------------
* Input Parameters
*
* pUser
* Pointer to the current user profile object. This object contains
* information like what languages are being used and this object
* also gives access to resources like the SAPI master lexicon object.
*
* dwSpeakFlags
* This is a set of flags used to control the behavior of the
* SAPI voice object and the associated engine.
*
* VoiceFmtIndex
* Zero based index specifying the output format that should
* be used during rendering.
*
* pTextFragList
* A linked list of text fragments to be rendered. There is
* one fragement per XML state change. If the input text does
* not contain any XML markup, there will only be a single fragment.
*
* pOutputSite
* The interface back to SAPI where all output audio samples and events are written.
*
* Return Values
* S_OK - This should be returned after successful rendering or if
* rendering was interrupted because *pfContinue changed to FALSE.
* E_INVALIDARG
* E_OUTOFMEMORY
*
*****************************************************************************/
STDMETHODIMP CTTSEngObj::Speak( DWORD dwSpeakFlags,
REFGUID rguidFormatId,
const WAVEFORMATEX * pWaveFormatEx,
const SPVTEXTFRAG* pTextFragList,
ISpTTSEngineSite* pOutputSite )
{
SPDBG_FUNC( "CTTSEngObj::Speak" );
HRESULT hr = S_OK;
//--- Check args
if( SP_IS_BAD_INTERFACE_PTR( pOutputSite ) ||
SP_IS_BAD_READ_PTR( pTextFragList ) )
{
hr = E_INVALIDARG;
}
else
{
//--- Init some vars
m_pCurrFrag = pTextFragList;
m_pNextChar = m_pCurrFrag->pTextStart;
m_pEndChar = m_pNextChar + m_pCurrFrag->ulTextLen;
m_ullAudioOff = 0;
//--- Parse
// We've supplied a simple word/sentence breaker just to show one
// way of walking the fragment list. It obviously doesn't deal with
// things like abreviations and expansion of numbers and dates.
CItemList ItemList;
while( SUCCEEDED( hr ) && !(pOutputSite->GetActions() & SPVES_ABORT) )
{
//--- Do skip?
if( pOutputSite->GetActions() & SPVES_SKIP )
{
long lSkipCnt;
SPVSKIPTYPE eType;
hr = pOutputSite->GetSkipInfo( &eType, &lSkipCnt );
if( SUCCEEDED( hr ) )
{
//--- Notify SAPI how many items we skipped. We're returning zero
// because this feature isn't implemented.
hr = pOutputSite->CompleteSkip( 0 );
}
}
//--- Build the text item list
if( SUCCEEDED( hr ) && (hr = GetNextSentence( ItemList )) != S_OK )
{
break;
}
//--- We aren't going to do any part of speech determination,
// prosody, or pronunciation determination. If you were, one thing
// you will need is access to the SAPI lexicon. You can get that with
// the following call.
// CComPtr<ISpLexicon> cpLexicon;
// hr = pUser->GetLexicon( &cpLexicon );
if( !(pOutputSite->GetActions() & SPVES_ABORT) )
{
//--- Fire begin sentence event
CSentItem& FirstItem = ItemList.GetHead();
CSentItem& LastItem = ItemList.GetTail();
CSpEvent Event;
//.........这里部分代码省略.........
示例10: genPartlist
void AbstractMidiEditor::songChanged(int type)/*{{{*/
{
if (type)
{
if (type & (SC_PART_REMOVED | SC_PART_MODIFIED
| SC_PART_INSERTED | SC_TRACK_REMOVED))
{
genPartlist();
// close window if editor has no parts anymore
if (parts()->empty())
{
close();
return;
}
}
if (canvas)
canvas->songChanged(type);
if (type & (SC_PART_REMOVED | SC_PART_MODIFIED
| SC_PART_INSERTED | SC_TRACK_REMOVED))
{
updateHScrollRange();
if (canvas)
setWindowTitle(canvas->getCaption());
if (type & SC_SIG)
time->update();
}
if (type & SC_SELECTION)
{
CItemList list = canvas->getSelectedItemsForCurrentPart();
//Get the rightmost selected note (if any)
iCItem i, iRightmost;
CItem* rightmost = NULL;
i = list.begin();
while (i != list.end())
{
if (i->second->isSelected())
{
iRightmost = i;
rightmost = i->second;
}
++i;
}
if (rightmost)
{
int pos = rightmost->pos().x();
pos = canvas->mapx(pos) + hscroll->offset();
int s = hscroll->offset();
int e = s + canvas->width();
if (pos > e)
hscroll->setOffset(rightmost->pos().x());
if (pos < s)
hscroll->setOffset(rightmost->pos().x());
}
}
}
}/*}}}*/
示例11: GetCountAdj
void CGroupOfGenerators::AddItems (SItemAddCtx &Ctx)
// AddItems
//
// Add items
{
int i, j;
// If we need to adjust counts, then do a separate algorithm
if (SetsAverageValue())
{
// Get the count adjustment.
Metric rCountAdj = GetCountAdj(Ctx.iLevel);
Metric rLoops = floor(rCountAdj);
Metric rLastLoopAdj = rCountAdj - rLoops;
// Loop if we have extra items
int iFullLoops = (int)rLoops;
for (i = 0; i < iFullLoops + 1; i++)
{
// For a full loop we just add the items
if (i < iFullLoops)
AddItemsInt(Ctx);
// Otherwise we need to add partial items
else
{
// Add the items to a private list.
CItemList LocalList;
CItemListManipulator ItemList(LocalList);
SItemAddCtx LocalCtx(ItemList);
LocalCtx.iLevel = Ctx.iLevel;
AddItemsInt(LocalCtx);
// Now loop over the items and adjust the count appropriately.
for (j = 0; j < LocalList.GetCount(); j++)
{
const CItem &Item = LocalList.GetItem(j);
int iOriginalCount = Item.GetCount();
// Adjust the count
Metric rNewCount = iOriginalCount * rLastLoopAdj;
Metric rNewCountInt = floor(rNewCount);
int iNewCount = (int)rNewCountInt;
Metric rExtra = rNewCount - rNewCountInt;
int iExtraChance = (int)(100000.0 * rExtra);
if (mathRandom(0, 100000) < iExtraChance)
iNewCount++;
// Add the item with the new count
if (iNewCount > 0)
{
if (iNewCount == iOriginalCount)
Ctx.ItemList.AddItem(Item);
else
{
CItem NewItem(Item);
NewItem.SetCount(iNewCount);
Ctx.ItemList.AddItem(NewItem);
}
}
}
}
}
}
else
AddItemsInt(Ctx);
}