From: terminator356 <ter...@us...> - 2009-02-02 22:31:07
|
Update of /cvsroot/lmuse/muse/muse/arranger In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv7631/muse/arranger Modified Files: Tag: REL07 arranger.h pcanvas.cpp pcanvas.h tlist.cpp trackinfo.cpp Log Message: See ChangeLog Index: trackinfo.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/arranger/trackinfo.cpp,v retrieving revision 1.10.2.2 retrieving revision 1.10.2.3 diff -C2 -d -r1.10.2.2 -r1.10.2.3 *** trackinfo.cpp 18 Aug 2008 00:15:24 -0000 1.10.2.2 --- trackinfo.cpp 2 Feb 2009 21:38:00 -0000 1.10.2.3 *************** *** 16,19 **** --- 16,20 ---- #include <qwidgetstack.h> #include <qlineedit.h> + #include <math.h> #include "spinbox.h" #include "config.h" *************** *** 149,153 **** MidiTrack* track = (MidiTrack*)selected; if (channel != track->outChannel()) { ! track->setOutChannel(channel); song->update(-1); } --- 150,157 ---- MidiTrack* track = (MidiTrack*)selected; if (channel != track->outChannel()) { ! // Changed by T356. ! //track->setOutChannel(channel); ! audio->msgSetTrackOutChannel(track, channel); ! song->update(-1); } *************** *** 177,181 **** if (index == track->outPort()) return; ! track->setOutPort(index); list->redraw(); } --- 181,188 ---- if (index == track->outPort()) return; ! // Changed by T356. ! //track->setOutPort(index); ! audio->msgSetTrackOutPort(track, index); ! list->redraw(); } *************** *** 225,229 **** audio->msgPlayMidiEvent(&ev); MidiInstrument* instr = midiPorts[port].instrument(); ! const char* name = instr->getPatchName(channel, program, song->mtype()); midiTrackInfo->iPatch->setText(QString(name)); // updateTrackInfo(); --- 232,236 ---- audio->msgPlayMidiEvent(&ev); MidiInstrument* instr = midiPorts[port].instrument(); ! const char* name = instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM); midiTrackInfo->iPatch->setText(QString(name)); // updateTrackInfo(); *************** *** 244,248 **** { if(mp->hwCtrlState(chan, CTRL_VOLUME) != CTRL_VAL_UNKNOWN) ! mp->setHwCtrlState(chan, CTRL_VOLUME, CTRL_VAL_UNKNOWN); } else --- 251,255 ---- { if(mp->hwCtrlState(chan, CTRL_VOLUME) != CTRL_VAL_UNKNOWN) ! audio->msgSetHwCtrlState(mp, chan, CTRL_VOLUME, CTRL_VAL_UNKNOWN); } else *************** *** 321,325 **** { if(mp->hwCtrlState(chan, CTRL_PANPOT) != CTRL_VAL_UNKNOWN) ! mp->setHwCtrlState(chan, CTRL_PANPOT, CTRL_VAL_UNKNOWN); } else --- 328,332 ---- { if(mp->hwCtrlState(chan, CTRL_PANPOT) != CTRL_VAL_UNKNOWN) ! audio->msgSetHwCtrlState(mp, chan, CTRL_PANPOT, CTRL_VAL_UNKNOWN); } else *************** *** 334,337 **** --- 341,345 ---- song->update(SC_MIDI_CONTROLLER); } + //--------------------------------------------------------- // instrPopup *************** *** 344,348 **** int port = track->outPort(); MidiInstrument* instr = midiPorts[port].instrument(); ! instr->populatePatchPopup(pop, channel, song->mtype()); if(pop->count() == 0) --- 352,356 ---- int port = track->outPort(); MidiInstrument* instr = midiPorts[port].instrument(); ! instr->populatePatchPopup(pop, channel, song->mtype(), track->type() == Track::DRUM); if(pop->count() == 0) *************** *** 357,360 **** --- 365,541 ---- //--------------------------------------------------------- + // iProgramDoubleClicked + //--------------------------------------------------------- + + void Arranger::iProgramDoubleClicked() + { + MidiTrack* track = (MidiTrack*)selected; + int port = track->outPort(); + int chan = track->outChannel(); + MidiPort* mp = &midiPorts[port]; + MidiController* mctl = mp->midiController(CTRL_PROGRAM); + + if(!track || !mctl) + return; + + int num = mctl->num(); + + int lastv = mp->lastValidHWCtrlState(chan, num); + int curv = mp->hwCtrlState(chan, num); + + if(curv == CTRL_VAL_UNKNOWN) + { + // If no value has ever been set yet, use the current knob value + // (or the controller's initial value?) to 'turn on' the controller. + if(lastv == CTRL_VAL_UNKNOWN) + { + int kiv = mctl->initVal(); + //int kiv = lrint(_knob->value()); + if(kiv == CTRL_VAL_UNKNOWN) + kiv = 0; + //else + //{ + //if(kiv < mctrl->minVal()) + // kiv = mctrl->minVal(); + //if(kiv > mctrl->maxVal()) + // kiv = mctrl->maxVal(); + //kiv += mctrl->bias(); + //} + + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, kiv); + audio->msgPlayMidiEvent(&ev); + } + else + { + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, lastv); + audio->msgPlayMidiEvent(&ev); + } + } + else + { + if(mp->hwCtrlState(chan, num) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, num, CTRL_VAL_UNKNOWN); + } + + song->update(SC_MIDI_CONTROLLER); + } + + //--------------------------------------------------------- + // iLautstDoubleClicked + //--------------------------------------------------------- + + void Arranger::iLautstDoubleClicked() + { + MidiTrack* track = (MidiTrack*)selected; + int port = track->outPort(); + int chan = track->outChannel(); + MidiPort* mp = &midiPorts[port]; + MidiController* mctl = mp->midiController(CTRL_VOLUME); + + if(!track || !mctl) + return; + + int num = mctl->num(); + + int lastv = mp->lastValidHWCtrlState(chan, num); + int curv = mp->hwCtrlState(chan, num); + + if(curv == CTRL_VAL_UNKNOWN) + { + // If no value has ever been set yet, use the current knob value + // (or the controller's initial value?) to 'turn on' the controller. + if(lastv == CTRL_VAL_UNKNOWN) + { + int kiv = mctl->initVal(); + //int kiv = lrint(_knob->value()); + if(kiv == CTRL_VAL_UNKNOWN) + // Set volume to 78% of range, so that if range is 0 - 127, then value is 100. + kiv = lround(double(mctl->maxVal() - mctl->minVal()) * 0.7874); + else + { + if(kiv < mctl->minVal()) + kiv = mctl->minVal(); + if(kiv > mctl->maxVal()) + kiv = mctl->maxVal(); + kiv += mctl->bias(); + } + + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, kiv); + audio->msgPlayMidiEvent(&ev); + } + else + { + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, lastv); + audio->msgPlayMidiEvent(&ev); + } + } + else + { + if(mp->hwCtrlState(chan, num) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, num, CTRL_VAL_UNKNOWN); + } + + song->update(SC_MIDI_CONTROLLER); + } + + //--------------------------------------------------------- + // iPanDoubleClicked + //--------------------------------------------------------- + + void Arranger::iPanDoubleClicked() + { + MidiTrack* track = (MidiTrack*)selected; + int port = track->outPort(); + int chan = track->outChannel(); + MidiPort* mp = &midiPorts[port]; + MidiController* mctl = mp->midiController(CTRL_PANPOT); + + if(!track || !mctl) + return; + + int num = mctl->num(); + + int lastv = mp->lastValidHWCtrlState(chan, num); + int curv = mp->hwCtrlState(chan, num); + + if(curv == CTRL_VAL_UNKNOWN) + { + // If no value has ever been set yet, use the current knob value + // (or the controller's initial value?) to 'turn on' the controller. + if(lastv == CTRL_VAL_UNKNOWN) + { + int kiv = mctl->initVal(); + //int kiv = lrint(_knob->value()); + if(kiv == CTRL_VAL_UNKNOWN) + // Set volume to 50% of range, so that if range is 0 - 127, then value is 64. + kiv = lround(double(mctl->maxVal() - mctl->minVal()) * 0.5); + else + { + if(kiv < mctl->minVal()) + kiv = mctl->minVal(); + if(kiv > mctl->maxVal()) + kiv = mctl->maxVal(); + kiv += mctl->bias(); + } + + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, kiv); + audio->msgPlayMidiEvent(&ev); + } + else + { + MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, lastv); + audio->msgPlayMidiEvent(&ev); + } + } + else + { + if(mp->hwCtrlState(chan, num) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, chan, num, CTRL_VAL_UNKNOWN); + } + + song->update(SC_MIDI_CONTROLLER); + } + + //--------------------------------------------------------- // genMidiTrackInfo //--------------------------------------------------------- *************** *** 373,377 **** --- 554,562 ---- connect(midiTrackInfo->iLBank, SIGNAL(valueChanged(int)), SLOT(iProgramChanged())); connect(midiTrackInfo->iProgram, SIGNAL(valueChanged(int)), SLOT(iProgramChanged())); + connect(midiTrackInfo->iHBank, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); + connect(midiTrackInfo->iLBank, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); + connect(midiTrackInfo->iProgram, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); connect(midiTrackInfo->iLautst, SIGNAL(valueChanged(int)), SLOT(iLautstChanged(int))); + connect(midiTrackInfo->iLautst, SIGNAL(doubleClicked()), SLOT(iLautstDoubleClicked())); connect(midiTrackInfo->iTransp, SIGNAL(valueChanged(int)), SLOT(iTranspChanged(int))); connect(midiTrackInfo->iAnschl, SIGNAL(valueChanged(int)), SLOT(iAnschlChanged(int))); *************** *** 380,383 **** --- 565,569 ---- connect(midiTrackInfo->iKompr, SIGNAL(valueChanged(int)), SLOT(iKomprChanged(int))); connect(midiTrackInfo->iPan, SIGNAL(valueChanged(int)), SLOT(iPanChanged(int))); + connect(midiTrackInfo->iPan, SIGNAL(doubleClicked()), SLOT(iPanDoubleClicked())); connect(midiTrackInfo->iOutput, SIGNAL(activated(int)), SLOT(iOutputPortChanged(int))); connect(midiTrackInfo->iInput, SIGNAL(textChanged(const QString&)), SLOT(iInputPortChanged(const QString&))); *************** *** 405,412 **** for (int i = 0; i < MIDI_PORTS; ++i) { - MidiPort* port = &midiPorts[i]; - MidiDevice* dev = port->device(); QString name; ! name.sprintf("%d(%s)", i+1, dev ? dev->name().latin1() : "none"); midiTrackInfo->iOutput->insertItem(name, i); if (i == outPort) --- 591,596 ---- for (int i = 0; i < MIDI_PORTS; ++i) { QString name; ! name.sprintf("%d:%s", i+1, midiPorts[i].portname().latin1()); midiTrackInfo->iOutput->insertItem(name, i); if (i == outPort) *************** *** 508,512 **** else { MidiInstrument* instr = midiPorts[outPort].instrument(); ! const char* name = instr->getPatchName(outChannel, program, song->mtype()); midiTrackInfo->iPatch->setText(QString(name)); --- 692,696 ---- else { MidiInstrument* instr = midiPorts[outPort].instrument(); ! const char* name = instr->getPatchName(outChannel, program, song->mtype(), track->type() == Track::DRUM); midiTrackInfo->iPatch->setText(QString(name)); Index: arranger.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/arranger/arranger.h,v retrieving revision 1.17.2.9 retrieving revision 1.17.2.10 diff -C2 -d -r1.17.2.9 -r1.17.2.10 *** arranger.h 18 Aug 2008 00:15:24 -0000 1.17.2.9 --- arranger.h 2 Feb 2009 21:38:00 -0000 1.17.2.10 *************** *** 126,130 **** --- 126,132 ---- void iOutputPortChanged(int); void iProgramChanged(); + void iProgramDoubleClicked(); void iLautstChanged(int); + void iLautstDoubleClicked(); void iTranspChanged(int); void iAnschlChanged(int); *************** *** 133,136 **** --- 135,139 ---- void iKomprChanged(int); void iPanChanged(int); + void iPanDoubleClicked(); void songChanged(int); void modeChange(int); Index: tlist.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/arranger/Attic/tlist.cpp,v retrieving revision 1.31.2.17 retrieving revision 1.31.2.18 diff -C2 -d -r1.31.2.17 -r1.31.2.18 *** tlist.cpp 21 May 2008 00:28:52 -0000 1.31.2.17 --- tlist.cpp 2 Feb 2009 21:38:00 -0000 1.31.2.18 *************** *** 315,324 **** if (track->isMidiTrack()) { int outport = ((MidiTrack*)track)->outPort(); ! MidiDevice* dev = midiPorts[outport].device(); ! if (dev) ! s.sprintf("%d(%s)", outport + 1, ! dev->name().latin1()); ! else ! s.sprintf("%d(none)", outport + 1); } p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, s); --- 315,319 ---- if (track->isMidiTrack()) { int outport = ((MidiTrack*)track)->outPort(); ! s.sprintf("%d:%s", outport+1, midiPorts[outport].portname().latin1()); } p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, s); *************** *** 470,474 **** int n = p->exec(mapToGlobal(QPoint(x, y)), 0); if (n != -1) { ! track->setOutPort(n); song->update(); if (t->type() == Track::DRUM) { --- 465,472 ---- int n = p->exec(mapToGlobal(QPoint(x, y)), 0); if (n != -1) { ! // Changed by T356. ! //track->setOutPort(n); ! audio->msgSetTrackOutPort(track, n); ! song->update(); if (t->type() == Track::DRUM) { *************** *** 794,798 **** } if (channel != ((MidiTrack*)t)->outChannel()) { ! mt->setOutChannel(channel); /* --- I really don't like this, you can mess up the whole map "as easy as dell" if (mt->type() == MidiTrack::DRUM) {//Change channel on all drum instruments --- 792,799 ---- } if (channel != ((MidiTrack*)t)->outChannel()) { ! // Changed by T356. ! //mt->setOutChannel(channel); ! audio->msgSetTrackOutChannel(mt, channel); ! /* --- I really don't like this, you can mess up the whole map "as easy as dell" if (mt->type() == MidiTrack::DRUM) {//Change channel on all drum instruments *************** *** 969,973 **** port = 0; if (port != ((MidiTrack*)t)->outPort()) { ! mt->setOutPort(port); song->update(SC_ROUTE); } --- 970,977 ---- port = 0; if (port != ((MidiTrack*)t)->outPort()) { ! // Changed by T356. ! //mt->setOutPort(port); ! audio->msgSetTrackOutPort(mt, port); ! song->update(SC_ROUTE); } *************** *** 985,989 **** channel = 0; if (channel != ((MidiTrack*)t)->outChannel()) { ! mt->setOutChannel(channel); // may result in adding/removing mixer strip: song->update(-1); --- 989,996 ---- channel = 0; if (channel != ((MidiTrack*)t)->outChannel()) { ! // Changed by T356. ! //mt->setOutChannel(channel); ! audio->msgSetTrackOutChannel(mt, channel); ! // may result in adding/removing mixer strip: song->update(-1); *************** *** 1108,1121 **** audio->msgIdle(true); PartList* pl = t->parts(); for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { EventList* el = ip->second->events(); for (iEvent ie = el->begin(); ie != el->end(); ++ie) { Event ev = ie->second; ! if (ev.type() != Note) ! continue; ! int pitch = ev.pitch(); ! pitch = drumMap[pitch].anote; ! ev.setPitch(pitch); } } t->setType(Track::MIDI); --- 1115,1145 ---- audio->msgIdle(true); PartList* pl = t->parts(); + MidiTrack* m = (MidiTrack*) t; for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { EventList* el = ip->second->events(); for (iEvent ie = el->begin(); ie != el->end(); ++ie) { Event ev = ie->second; ! if(ev.type() == Note) ! { ! int pitch = ev.pitch(); ! // Changed by T356. ! // Tested: Notes were being mixed up switching back and forth between midi and drum. ! //pitch = drumMap[pitch].anote; ! pitch = drumMap[pitch].enote; ! ! ev.setPitch(pitch); ! } ! else ! if(ev.type() == Controller) ! { ! int ctl = ev.dataA(); ! // Is it a drum controller event, according to the track port's instrument? ! MidiController *mc = midiPorts[m->outPort()].drumController(ctl); ! if(mc) ! // Change the controller event's index into the drum map to an instrument note. ! ev.setA((ctl & ~0xff) | drumMap[ctl & 0x7f].enote); } + + } } t->setType(Track::MIDI); *************** *** 1139,1152 **** audio->msgIdle(true); PartList* pl = t->parts(); for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { EventList* el = ip->second->events(); for (iEvent ie = el->begin(); ie != el->end(); ++ie) { Event ev = ie->second; ! if (ev.type() != Note) ! continue; ! int pitch = ev.pitch(); ! pitch = drumInmap[pitch]; ! ev.setPitch(pitch); } } t->setType(Track::DRUM); --- 1163,1192 ---- audio->msgIdle(true); PartList* pl = t->parts(); + MidiTrack* m = (MidiTrack*) t; for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { EventList* el = ip->second->events(); for (iEvent ie = el->begin(); ie != el->end(); ++ie) { Event ev = ie->second; ! if (ev.type() == Note) ! { ! int pitch = ev.pitch(); ! pitch = drumInmap[pitch]; ! ev.setPitch(pitch); ! } ! else ! { ! if(ev.type() == Controller) ! { ! int ctl = ev.dataA(); ! // Is it a drum controller event, according to the track port's instrument? ! MidiController *mc = midiPorts[m->outPort()].drumController(ctl); ! if(mc) ! // Change the controller event's instrument note to an index into the drum map. ! ev.setA((ctl & ~0xff) | drumInmap[ctl & 0x7f]); ! } ! } + + } } t->setType(Track::DRUM); Index: pcanvas.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/arranger/Attic/pcanvas.cpp,v retrieving revision 1.48.2.17 retrieving revision 1.48.2.18 diff -C2 -d -r1.48.2.17 -r1.48.2.18 *** pcanvas.cpp 21 May 2008 00:28:52 -0000 1.48.2.17 --- pcanvas.cpp 2 Feb 2009 21:38:00 -0000 1.48.2.18 *************** *** 270,278 **** //--------------------------------------------------------- // moveItem // return false, if copy/move not allowed //--------------------------------------------------------- ! bool PartCanvas::moveItem(CItem* item, const QPoint& newpos, DragType t, int*) { NPart* npart = (NPart*) item; --- 270,412 ---- //--------------------------------------------------------- + // moveCanvasItems + //--------------------------------------------------------- + + void PartCanvas::moveCanvasItems(CItemList& items, int dp, int dx, DragType dtype, int*) + { + /* + if(editor->parts()->empty()) + return; + + //struct p2c + //{ + // Part* newp; + // int xdiff; + //} + + //std::set<Part*> parts2change; + //typedef std::set<Part*>::iterator iptc; + std::map<Part*, Part*> parts2change; + typedef std::map<Part*, Part*>::iterator iP2C; + + int modified = 0; + for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) + { + Part* part = ip->second; + if(!part) + continue; + + int npartoffset = 0; + for(iCItem ici = items.begin(); ici != items.end(); ++ici) + { + CItem* ci = ici->second; + //Part* pt = ci->part(); + //if(!pt) + if(ci->part() != part) + continue; + + int x = ci->pos().x() + dx; + int y = pitch2y(y2pitch(ci->pos().y()) + dp); + QPoint newpos = raster(QPoint(x, y)); + + // Test moving the item... + + //int offset = testMoveItem(ci, newpos, dragtype); + NEvent* nevent = (NEvent*) ci; + Event event = nevent->event(); + //int npitch = y2pitch(newpos.y()); + x = newpos.x(); + if (x < 0) + x = 0; + + int ntick = editor->rasterVal(x) - part->tick(); + if (ntick < 0) + ntick = 0; + int diff = ntick + event.lenTick() - part->lenTick(); + + // If moving the item would require a new part size... + if(diff > npartoffset) + npartoffset = diff; + } + + if(npartoffset > 0) + { + // Create new part... + // if there are several events that are moved outside the part, it will be recreated for each + // so the part _in_ the event will not be valid, ask the authority. + Part* newPart = part->clone(); + //Part* newPart = Canvas::part()->clone(); + + newPart->setLenTick(newPart->lenTick() + npartoffset); + audio->msgChangePart(part, newPart,false); + + modified = SC_PART_MODIFIED; + + // BUG FIX: #1650953 + // Added by T356. + // Fixes posted "select and drag past end of part - crashing" bug + for(iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) + { + if(ip->second == part) + { + editor->parts()->erase(ip); + break; + } + } + + editor->parts()->add(newPart); + if(parts2change.find(part) == parts2change.end()) + parts2change.insert(std::pair<Part*, Part*> (part, newPart)); + + // part = newPart; // reassign + // item->setPart(part); + // item->setEvent(newEvent); + // curPart = part; + // curPartId = curPart->sn(); + + } + } + */ + + // int modified = 0; + for(iCItem ici = items.begin(); ici != items.end(); ++ici) + { + CItem* ci = ici->second; + + // If this item's part is in the parts2change list, change the item's part to the new part. + //Part* pt = ci->part(); + //iP2C ip2c = parts2change.find(pt); + //if(ip2c != parts2change.end()) + // ci->setPart(ip2c->second); + + int x = ci->pos().x(); + int y = ci->pos().y(); + int nx = x + dx; + int ny = pitch2y(y2pitch(y) + dp); + QPoint newpos = raster(QPoint(nx, ny)); + selectItem(ci, true); + + if(moveItem(ci, newpos, dtype)) + ci->move(newpos); + if(moving.size() == 1) { + itemReleased(curItem, newpos); + } + if(dtype == MOVE_COPY || dtype == MOVE_CLONE) + selectItem(ci, false); + } + + + //if(pflags) + // *pflags = modified; + } + + //--------------------------------------------------------- // moveItem // return false, if copy/move not allowed //--------------------------------------------------------- ! // Changed by T356. ! //bool PartCanvas::moveItem(CItem* item, const QPoint& newpos, DragType t, int*) ! bool PartCanvas::moveItem(CItem* item, const QPoint& newpos, DragType t) { NPart* npart = (NPart*) item; Index: pcanvas.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/arranger/Attic/pcanvas.h,v retrieving revision 1.11.2.1 retrieving revision 1.11.2.2 diff -C2 -d -r1.11.2.1 -r1.11.2.2 *** pcanvas.h 26 Jan 2008 07:23:20 -0000 1.11.2.1 --- pcanvas.h 2 Feb 2009 21:38:00 -0000 1.11.2.2 *************** *** 60,64 **** virtual int pitch2y(int p) const; ! virtual bool moveItem(CItem*, const QPoint&, DragType, int*); virtual CItem* newItem(const QPoint&, int); virtual void resizeItem(CItem*,bool); --- 60,67 ---- virtual int pitch2y(int p) const; ! virtual void moveCanvasItems(CItemList&, int, int, DragType, int*); ! // Changed by T356. ! //virtual bool moveItem(CItem*, const QPoint&, DragType, int*); ! virtual bool moveItem(CItem*, const QPoint&, DragType); virtual CItem* newItem(const QPoint&, int); virtual void resizeItem(CItem*,bool); |