12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766 |
- #ifndef QCUSTOMPLOT_H
- #define QCUSTOMPLOT_H
- #include <QtCore/qglobal.h>
- #ifdef QCUSTOMPLOT_USE_OPENGL
- # if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
- # define QCP_OPENGL_PBUFFER
- # else
- # define QCP_OPENGL_FBO
- # endif
- # if QT_VERSION >= QT_VERSION_CHECK(5, 3, 0)
- # define QCP_OPENGL_OFFSCREENSURFACE
- # endif
- #endif
- #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
- # define QCP_DEVICEPIXELRATIO_SUPPORTED
- # if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
- # define QCP_DEVICEPIXELRATIO_FLOAT
- # endif
- #endif
- #include <QtCore/QObject>
- #include <QtCore/QPointer>
- #include <QtCore/QSharedPointer>
- #include <QtCore/QTimer>
- #include <QtGui/QPainter>
- #include <QtGui/QPainterPath>
- #include <QtGui/QPaintEvent>
- #include <QtGui/QMouseEvent>
- #include <QtGui/QWheelEvent>
- #include <QtGui/QPixmap>
- #include <QtCore/QVector>
- #include <QtCore/QString>
- #include <QtCore/QDateTime>
- #include <QtCore/QMultiMap>
- #include <QtCore/QFlags>
- #include <QtCore/QDebug>
- #include <QtCore/QStack>
- #include <QtCore/QCache>
- #include <QtCore/QMargins>
- #include <qmath.h>
- #include <limits>
- #include <algorithm>
- #ifdef QCP_OPENGL_FBO
- # include <QtGui/QOpenGLContext>
- # if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- # include <QtGui/QOpenGLFramebufferObject>
- # else
- # include <QOpenGLFramebufferObject>
- # include <QOpenGLPaintDevice>
- # endif
- # ifdef QCP_OPENGL_OFFSCREENSURFACE
- # include <QtGui/QOffscreenSurface>
- # else
- # include <QtGui/QWindow>
- # endif
- #endif
- #ifdef QCP_OPENGL_PBUFFER
- # include <QtOpenGL/QGLPixelBuffer>
- #endif
- #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
- # include <qnumeric.h>
- # include <QtGui/QWidget>
- # include <QtGui/QPrinter>
- # include <QtGui/QPrintEngine>
- #else
- # include <QtNumeric>
- # include <QtWidgets/QWidget>
- # include <QtPrintSupport/QtPrintSupport>
- #endif
- #if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0)
- # include <QtCore/QElapsedTimer>
- #endif
- # if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)
- # include <QtCore/QTimeZone>
- #endif
- class QCPPainter;
- class QCustomPlot;
- class QCPLayerable;
- class QCPLayoutElement;
- class QCPLayout;
- class QCPAxis;
- class QCPAxisRect;
- class QCPAxisPainterPrivate;
- class QCPAbstractPlottable;
- class QCPGraph;
- class QCPAbstractItem;
- class QCPPlottableInterface1D;
- class QCPLegend;
- class QCPItemPosition;
- class QCPLayer;
- class QCPAbstractLegendItem;
- class QCPSelectionRect;
- class QCPColorMap;
- class QCPColorScale;
- class QCPBars;
- class QCPPolarAxisRadial;
- class QCPPolarAxisAngular;
- class QCPPolarGrid;
- class QCPPolarGraph;
- #define QCUSTOMPLOT_VERSION_STR "2.1.0"
- #define QCUSTOMPLOT_VERSION 0x020100
- #if defined(QT_STATIC_BUILD)
- # define QCP_LIB_DECL
- #elif defined(QCUSTOMPLOT_COMPILE_LIBRARY)
- # define QCP_LIB_DECL Q_DECL_EXPORT
- #elif defined(QCUSTOMPLOT_USE_LIBRARY)
- # define QCP_LIB_DECL Q_DECL_IMPORT
- #else
- # define QCP_LIB_DECL
- #endif
- #ifndef Q_DECL_OVERRIDE
- # define Q_DECL_OVERRIDE
- #endif
- #ifndef Q_MOC_RUN
- namespace QCP {
- #else
- class QCP {
- Q_GADGET
- Q_ENUMS(ExportPen)
- Q_ENUMS(ResolutionUnit)
- Q_ENUMS(SignDomain)
- Q_ENUMS(MarginSide)
- Q_FLAGS(MarginSides)
- Q_ENUMS(AntialiasedElement)
- Q_FLAGS(AntialiasedElements)
- Q_ENUMS(PlottingHint)
- Q_FLAGS(PlottingHints)
- Q_ENUMS(Interaction)
- Q_FLAGS(Interactions)
- Q_ENUMS(SelectionRectMode)
- Q_ENUMS(SelectionType)
- public:
- #endif
-
- enum ResolutionUnit { ruDotsPerMeter
- ,ruDotsPerCentimeter
- ,ruDotsPerInch
- };
-
- enum ExportPen { epNoCosmetic
- ,epAllowCosmetic
- };
-
- enum SignDomain { sdNegative
- ,sdBoth
- ,sdPositive
- };
-
- enum MarginSide { msLeft = 0x01
- ,msRight = 0x02
- ,msTop = 0x04
- ,msBottom = 0x08
- ,msAll = 0xFF
- ,msNone = 0x00
- };
- Q_DECLARE_FLAGS(MarginSides, MarginSide)
-
- enum AntialiasedElement { aeAxes = 0x0001
- ,aeGrid = 0x0002
- ,aeSubGrid = 0x0004
- ,aeLegend = 0x0008
- ,aeLegendItems = 0x0010
- ,aePlottables = 0x0020
- ,aeItems = 0x0040
- ,aeScatters = 0x0080
- ,aeFills = 0x0100
- ,aeZeroLine = 0x0200
- ,aeOther = 0x8000
- ,aeAll = 0xFFFF
- ,aeNone = 0x0000
- };
- Q_DECLARE_FLAGS(AntialiasedElements, AntialiasedElement)
-
- enum PlottingHint { phNone = 0x000
- ,phFastPolylines = 0x001
-
- ,phImmediateRefresh = 0x002
-
- ,phCacheLabels = 0x004
- };
- Q_DECLARE_FLAGS(PlottingHints, PlottingHint)
-
- enum Interaction { iNone = 0x000
- ,iRangeDrag = 0x001
- ,iRangeZoom = 0x002
- ,iMultiSelect = 0x004
- ,iSelectPlottables = 0x008
- ,iSelectAxes = 0x010
- ,iSelectLegend = 0x020
- ,iSelectItems = 0x040
- ,iSelectOther = 0x080
- ,iSelectPlottablesBeyondAxisRect = 0x100
- };
- Q_DECLARE_FLAGS(Interactions, Interaction)
-
- enum SelectionRectMode { srmNone
- ,srmZoom
- ,srmSelect
- ,srmCustom
- };
-
- enum SelectionType { stNone
- ,stWhole
- ,stSingleData
- ,stDataRange
- ,stMultipleDataRanges
- };
-
- inline bool isInvalidData(double value)
- {
- return qIsNaN(value) || qIsInf(value);
- }
-
- inline bool isInvalidData(double value1, double value2)
- {
- return isInvalidData(value1) || isInvalidData(value2);
- }
-
- inline void setMarginValue(QMarginsF &margins, QCP::MarginSide side, double value)
- {
- switch (side)
- {
- case QCP::msLeft: margins.setLeft(value); break;
- case QCP::msRight: margins.setRight(value); break;
- case QCP::msTop: margins.setTop(value); break;
- case QCP::msBottom: margins.setBottom(value); break;
- case QCP::msAll: margins = QMarginsF(value, value, value, value); break;
- default: break;
- }
- }
-
- inline double getMarginValue(const QMarginsF &margins, QCP::MarginSide side)
- {
- switch (side)
- {
- case QCP::msLeft: return margins.left();
- case QCP::msRight: return margins.right();
- case QCP::msTop: return margins.top();
- case QCP::msBottom: return margins.bottom();
- default: break;
- }
- return 0;
- }
- extern const QMetaObject staticMetaObject;
- }
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::AntialiasedElements)
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::PlottingHints)
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::MarginSides)
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::Interactions)
- Q_DECLARE_METATYPE(QCP::ExportPen)
- Q_DECLARE_METATYPE(QCP::ResolutionUnit)
- Q_DECLARE_METATYPE(QCP::SignDomain)
- Q_DECLARE_METATYPE(QCP::MarginSide)
- Q_DECLARE_METATYPE(QCP::AntialiasedElement)
- Q_DECLARE_METATYPE(QCP::PlottingHint)
- Q_DECLARE_METATYPE(QCP::Interaction)
- Q_DECLARE_METATYPE(QCP::SelectionRectMode)
- Q_DECLARE_METATYPE(QCP::SelectionType)
- class QCP_LIB_DECL QCPVector2D
- {
- public:
- QCPVector2D();
- QCPVector2D(double x, double y);
- QCPVector2D(const QPoint &point);
- QCPVector2D(const QPointF &point);
-
- double x() const { return mX; }
- double y() const { return mY; }
- double &rx() { return mX; }
- double &ry() { return mY; }
-
- void setX(double x) { mX = x; }
- void setY(double y) { mY = y; }
-
- double length() const { return qSqrt(mX*mX+mY*mY); }
- double lengthSquared() const { return mX*mX+mY*mY; }
- double angle() const { return qAtan2(mY, mX); }
- QPoint toPoint() const { return QPoint(int(mX), int(mY)); }
- QPointF toPointF() const { return QPointF(mX, mY); }
- bool isNull() const { return qIsNull(mX) && qIsNull(mY); }
- void normalize();
- QCPVector2D normalized() const;
- QCPVector2D perpendicular() const { return QCPVector2D(-mY, mX); }
- double dot(const QCPVector2D &vec) const { return mX*vec.mX+mY*vec.mY; }
- double distanceSquaredToLine(const QCPVector2D &start, const QCPVector2D &end) const;
- double distanceSquaredToLine(const QLineF &line) const;
- double distanceToStraightLine(const QCPVector2D &base, const QCPVector2D &direction) const;
- QCPVector2D &operator*=(double factor);
- QCPVector2D &operator/=(double divisor);
- QCPVector2D &operator+=(const QCPVector2D &vector);
- QCPVector2D &operator-=(const QCPVector2D &vector);
- private:
-
- double mX, mY;
- friend inline const QCPVector2D operator*(double factor, const QCPVector2D &vec);
- friend inline const QCPVector2D operator*(const QCPVector2D &vec, double factor);
- friend inline const QCPVector2D operator/(const QCPVector2D &vec, double divisor);
- friend inline const QCPVector2D operator+(const QCPVector2D &vec1, const QCPVector2D &vec2);
- friend inline const QCPVector2D operator-(const QCPVector2D &vec1, const QCPVector2D &vec2);
- friend inline const QCPVector2D operator-(const QCPVector2D &vec);
- };
- Q_DECLARE_TYPEINFO(QCPVector2D, Q_MOVABLE_TYPE);
- inline const QCPVector2D operator*(double factor, const QCPVector2D &vec) { return QCPVector2D(vec.mX*factor, vec.mY*factor); }
- inline const QCPVector2D operator*(const QCPVector2D &vec, double factor) { return QCPVector2D(vec.mX*factor, vec.mY*factor); }
- inline const QCPVector2D operator/(const QCPVector2D &vec, double divisor) { return QCPVector2D(vec.mX/divisor, vec.mY/divisor); }
- inline const QCPVector2D operator+(const QCPVector2D &vec1, const QCPVector2D &vec2) { return QCPVector2D(vec1.mX+vec2.mX, vec1.mY+vec2.mY); }
- inline const QCPVector2D operator-(const QCPVector2D &vec1, const QCPVector2D &vec2) { return QCPVector2D(vec1.mX-vec2.mX, vec1.mY-vec2.mY); }
- inline const QCPVector2D operator-(const QCPVector2D &vec) { return QCPVector2D(-vec.mX, -vec.mY); }
- inline QDebug operator<< (QDebug d, const QCPVector2D &vec)
- {
- d.nospace() << "QCPVector2D(" << vec.x() << ", " << vec.y() << ")";
- return d.space();
- }
- class QCP_LIB_DECL QCPPainter : public QPainter
- {
- Q_GADGET
- public:
-
- enum PainterMode { pmDefault = 0x00
- ,pmVectorized = 0x01
- ,pmNoCaching = 0x02
- ,pmNonCosmetic = 0x04
- };
- Q_ENUMS(PainterMode)
- Q_FLAGS(PainterModes)
- Q_DECLARE_FLAGS(PainterModes, PainterMode)
- QCPPainter();
- explicit QCPPainter(QPaintDevice *device);
-
- bool antialiasing() const { return testRenderHint(QPainter::Antialiasing); }
- PainterModes modes() const { return mModes; }
-
- void setAntialiasing(bool enabled);
- void setMode(PainterMode mode, bool enabled=true);
- void setModes(PainterModes modes);
-
- bool begin(QPaintDevice *device);
- void setPen(const QPen &pen);
- void setPen(const QColor &color);
- void setPen(Qt::PenStyle penStyle);
- void drawLine(const QLineF &line);
- void drawLine(const QPointF &p1, const QPointF &p2) {drawLine(QLineF(p1, p2));}
- void save();
- void restore();
-
- void makeNonCosmetic();
- protected:
-
- PainterModes mModes;
- bool mIsAntialiasing;
-
- QStack<bool> mAntialiasingStack;
- };
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCPPainter::PainterModes)
- Q_DECLARE_METATYPE(QCPPainter::PainterMode)
- class QCP_LIB_DECL QCPAbstractPaintBuffer
- {
- public:
- explicit QCPAbstractPaintBuffer(const QSize &size, double devicePixelRatio);
- virtual ~QCPAbstractPaintBuffer();
-
- QSize size() const { return mSize; }
- bool invalidated() const { return mInvalidated; }
- double devicePixelRatio() const { return mDevicePixelRatio; }
-
- void setSize(const QSize &size);
- void setInvalidated(bool invalidated=true);
- void setDevicePixelRatio(double ratio);
-
- virtual QCPPainter *startPainting() = 0;
- virtual void donePainting() {}
- virtual void draw(QCPPainter *painter) const = 0;
- virtual void clear(const QColor &color) = 0;
- protected:
-
- QSize mSize;
- double mDevicePixelRatio;
-
- bool mInvalidated;
-
- virtual void reallocateBuffer() = 0;
- };
- class QCP_LIB_DECL QCPPaintBufferPixmap : public QCPAbstractPaintBuffer
- {
- public:
- explicit QCPPaintBufferPixmap(const QSize &size, double devicePixelRatio);
- virtual ~QCPPaintBufferPixmap() Q_DECL_OVERRIDE;
-
- virtual QCPPainter *startPainting() Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) const Q_DECL_OVERRIDE;
- void clear(const QColor &color) Q_DECL_OVERRIDE;
- protected:
-
- QPixmap mBuffer;
-
- virtual void reallocateBuffer() Q_DECL_OVERRIDE;
- };
- #ifdef QCP_OPENGL_PBUFFER
- class QCP_LIB_DECL QCPPaintBufferGlPbuffer : public QCPAbstractPaintBuffer
- {
- public:
- explicit QCPPaintBufferGlPbuffer(const QSize &size, double devicePixelRatio, int multisamples);
- virtual ~QCPPaintBufferGlPbuffer() Q_DECL_OVERRIDE;
-
- virtual QCPPainter *startPainting() Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) const Q_DECL_OVERRIDE;
- void clear(const QColor &color) Q_DECL_OVERRIDE;
- protected:
-
- QGLPixelBuffer *mGlPBuffer;
- int mMultisamples;
-
- virtual void reallocateBuffer() Q_DECL_OVERRIDE;
- };
- #endif
- #ifdef QCP_OPENGL_FBO
- class QCP_LIB_DECL QCPPaintBufferGlFbo : public QCPAbstractPaintBuffer
- {
- public:
- explicit QCPPaintBufferGlFbo(const QSize &size, double devicePixelRatio, QWeakPointer<QOpenGLContext> glContext, QWeakPointer<QOpenGLPaintDevice> glPaintDevice);
- virtual ~QCPPaintBufferGlFbo() Q_DECL_OVERRIDE;
-
- virtual QCPPainter *startPainting() Q_DECL_OVERRIDE;
- virtual void donePainting() Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) const Q_DECL_OVERRIDE;
- void clear(const QColor &color) Q_DECL_OVERRIDE;
- protected:
-
- QWeakPointer<QOpenGLContext> mGlContext;
- QWeakPointer<QOpenGLPaintDevice> mGlPaintDevice;
- QOpenGLFramebufferObject *mGlFrameBuffer;
-
- virtual void reallocateBuffer() Q_DECL_OVERRIDE;
- };
- #endif
- class QCP_LIB_DECL QCPLayer : public QObject
- {
- Q_OBJECT
-
- Q_PROPERTY(QCustomPlot* parentPlot READ parentPlot)
- Q_PROPERTY(QString name READ name)
- Q_PROPERTY(int index READ index)
- Q_PROPERTY(QList<QCPLayerable*> children READ children)
- Q_PROPERTY(bool visible READ visible WRITE setVisible)
- Q_PROPERTY(LayerMode mode READ mode WRITE setMode)
-
- public:
-
- enum LayerMode { lmLogical
- ,lmBuffered
- };
- Q_ENUMS(LayerMode)
- QCPLayer(QCustomPlot* parentPlot, const QString &layerName);
- virtual ~QCPLayer();
-
- QCustomPlot *parentPlot() const { return mParentPlot; }
- QString name() const { return mName; }
- int index() const { return mIndex; }
- QList<QCPLayerable*> children() const { return mChildren; }
- bool visible() const { return mVisible; }
- LayerMode mode() const { return mMode; }
-
- void setVisible(bool visible);
- void setMode(LayerMode mode);
-
- void replot();
- protected:
-
- QCustomPlot *mParentPlot;
- QString mName;
- int mIndex;
- QList<QCPLayerable*> mChildren;
- bool mVisible;
- LayerMode mMode;
-
- QWeakPointer<QCPAbstractPaintBuffer> mPaintBuffer;
-
- void draw(QCPPainter *painter);
- void drawToPaintBuffer();
- void addChild(QCPLayerable *layerable, bool prepend);
- void removeChild(QCPLayerable *layerable);
- private:
- Q_DISABLE_COPY(QCPLayer)
- friend class QCustomPlot;
- friend class QCPLayerable;
- };
- Q_DECLARE_METATYPE(QCPLayer::LayerMode)
- class QCP_LIB_DECL QCPLayerable : public QObject
- {
- Q_OBJECT
-
- Q_PROPERTY(bool visible READ visible WRITE setVisible)
- Q_PROPERTY(QCustomPlot* parentPlot READ parentPlot)
- Q_PROPERTY(QCPLayerable* parentLayerable READ parentLayerable)
- Q_PROPERTY(QCPLayer* layer READ layer WRITE setLayer NOTIFY layerChanged)
- Q_PROPERTY(bool antialiased READ antialiased WRITE setAntialiased)
-
- public:
- QCPLayerable(QCustomPlot *plot, QString targetLayer=QString(), QCPLayerable *parentLayerable=nullptr);
- virtual ~QCPLayerable();
-
- bool visible() const { return mVisible; }
- QCustomPlot *parentPlot() const { return mParentPlot; }
- QCPLayerable *parentLayerable() const { return mParentLayerable.data(); }
- QCPLayer *layer() const { return mLayer; }
- bool antialiased() const { return mAntialiased; }
-
- void setVisible(bool on);
- Q_SLOT bool setLayer(QCPLayer *layer);
- bool setLayer(const QString &layerName);
- void setAntialiased(bool enabled);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const;
-
- bool realVisibility() const;
- void initializeParentPlot(QCustomPlot *parentPlot);
- signals:
- void layerChanged(QCPLayer *newLayer);
- protected:
-
- bool mVisible;
- QCustomPlot *mParentPlot;
- QPointer<QCPLayerable> mParentLayerable;
- QCPLayer *mLayer;
- bool mAntialiased;
-
- virtual void parentPlotInitialized(QCustomPlot *parentPlot);
- virtual QCP::Interaction selectionCategory() const;
- virtual QRectF clipRect() const;
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const = 0;
- virtual void draw(QCPPainter *painter) = 0;
-
- virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged);
- virtual void deselectEvent(bool *selectionStateChanged);
-
- virtual void mousePressEvent(QMouseEvent *event, const QVariant &details);
- virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos);
- virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos);
- virtual void mouseDoubleClickEvent(QMouseEvent *event, const QVariant &details);
- virtual void wheelEvent(QWheelEvent *event);
-
- void setParentLayerable(QCPLayerable* parentLayerable);
- bool moveToLayer(QCPLayer *layer, bool prepend);
- void applyAntialiasingHint(QCPPainter *painter, bool localAntialiased, QCP::AntialiasedElement overrideElement) const;
- private:
- Q_DISABLE_COPY(QCPLayerable)
- friend class QCustomPlot;
- friend class QCPLayer;
- friend class QCPAxisRect;
- };
- class QCP_LIB_DECL QCPRange
- {
- public:
- double lower, upper;
- QCPRange();
- QCPRange(double lower, double upper);
- bool operator==(const QCPRange& other) const { return qFuzzyCompare(lower, other.lower) && qFuzzyCompare(upper,other.upper); }
- bool operator!=(const QCPRange& other) const { return !(*this == other); }
- QCPRange &operator+=(const double& value) { lower+=value; upper+=value; return *this; }
- QCPRange &operator-=(const double& value) { lower-=value; upper-=value; return *this; }
- QCPRange &operator*=(const double& value) { lower*=value; upper*=value; return *this; }
- QCPRange &operator/=(const double& value) { lower/=value; upper/=value; return *this; }
- friend inline const QCPRange operator+(const QCPRange&, double);
- friend inline const QCPRange operator+(double, const QCPRange&);
- friend inline const QCPRange operator-(const QCPRange& range, double value);
- friend inline const QCPRange operator*(const QCPRange& range, double value);
- friend inline const QCPRange operator*(double value, const QCPRange& range);
- friend inline const QCPRange operator/(const QCPRange& range, double value);
- double size() const { return upper-lower; }
- double center() const { return (upper+lower)*0.5; }
- void normalize() { if (lower > upper) qSwap(lower, upper); }
- void expand(const QCPRange &otherRange);
- void expand(double includeCoord);
- QCPRange expanded(const QCPRange &otherRange) const;
- QCPRange expanded(double includeCoord) const;
- QCPRange bounded(double lowerBound, double upperBound) const;
- QCPRange sanitizedForLogScale() const;
- QCPRange sanitizedForLinScale() const;
- bool contains(double value) const { return value >= lower && value <= upper; }
- static bool validRange(double lower, double upper);
- static bool validRange(const QCPRange &range);
- static const double minRange;
- static const double maxRange;
- };
- Q_DECLARE_TYPEINFO(QCPRange, Q_MOVABLE_TYPE);
- inline QDebug operator<< (QDebug d, const QCPRange &range)
- {
- d.nospace() << "QCPRange(" << range.lower << ", " << range.upper << ")";
- return d.space();
- }
- inline const QCPRange operator+(const QCPRange& range, double value)
- {
- QCPRange result(range);
- result += value;
- return result;
- }
- inline const QCPRange operator+(double value, const QCPRange& range)
- {
- QCPRange result(range);
- result += value;
- return result;
- }
- inline const QCPRange operator-(const QCPRange& range, double value)
- {
- QCPRange result(range);
- result -= value;
- return result;
- }
- inline const QCPRange operator*(const QCPRange& range, double value)
- {
- QCPRange result(range);
- result *= value;
- return result;
- }
- inline const QCPRange operator*(double value, const QCPRange& range)
- {
- QCPRange result(range);
- result *= value;
- return result;
- }
- inline const QCPRange operator/(const QCPRange& range, double value)
- {
- QCPRange result(range);
- result /= value;
- return result;
- }
- class QCP_LIB_DECL QCPDataRange
- {
- public:
- QCPDataRange();
- QCPDataRange(int begin, int end);
- bool operator==(const QCPDataRange& other) const { return mBegin == other.mBegin && mEnd == other.mEnd; }
- bool operator!=(const QCPDataRange& other) const { return !(*this == other); }
-
- int begin() const { return mBegin; }
- int end() const { return mEnd; }
- int size() const { return mEnd-mBegin; }
- int length() const { return size(); }
-
- void setBegin(int begin) { mBegin = begin; }
- void setEnd(int end) { mEnd = end; }
-
- bool isValid() const { return (mEnd >= mBegin) && (mBegin >= 0); }
- bool isEmpty() const { return length() == 0; }
- QCPDataRange bounded(const QCPDataRange &other) const;
- QCPDataRange expanded(const QCPDataRange &other) const;
- QCPDataRange intersection(const QCPDataRange &other) const;
- QCPDataRange adjusted(int changeBegin, int changeEnd) const { return QCPDataRange(mBegin+changeBegin, mEnd+changeEnd); }
- bool intersects(const QCPDataRange &other) const;
- bool contains(const QCPDataRange &other) const;
- private:
-
- int mBegin, mEnd;
- };
- Q_DECLARE_TYPEINFO(QCPDataRange, Q_MOVABLE_TYPE);
- class QCP_LIB_DECL QCPDataSelection
- {
- public:
- explicit QCPDataSelection();
- explicit QCPDataSelection(const QCPDataRange &range);
- bool operator==(const QCPDataSelection& other) const;
- bool operator!=(const QCPDataSelection& other) const { return !(*this == other); }
- QCPDataSelection &operator+=(const QCPDataSelection& other);
- QCPDataSelection &operator+=(const QCPDataRange& other);
- QCPDataSelection &operator-=(const QCPDataSelection& other);
- QCPDataSelection &operator-=(const QCPDataRange& other);
- friend inline const QCPDataSelection operator+(const QCPDataSelection& a, const QCPDataSelection& b);
- friend inline const QCPDataSelection operator+(const QCPDataRange& a, const QCPDataSelection& b);
- friend inline const QCPDataSelection operator+(const QCPDataSelection& a, const QCPDataRange& b);
- friend inline const QCPDataSelection operator+(const QCPDataRange& a, const QCPDataRange& b);
- friend inline const QCPDataSelection operator-(const QCPDataSelection& a, const QCPDataSelection& b);
- friend inline const QCPDataSelection operator-(const QCPDataRange& a, const QCPDataSelection& b);
- friend inline const QCPDataSelection operator-(const QCPDataSelection& a, const QCPDataRange& b);
- friend inline const QCPDataSelection operator-(const QCPDataRange& a, const QCPDataRange& b);
-
- int dataRangeCount() const { return mDataRanges.size(); }
- int dataPointCount() const;
- QCPDataRange dataRange(int index=0) const;
- QList<QCPDataRange> dataRanges() const { return mDataRanges; }
- QCPDataRange span() const;
-
- void addDataRange(const QCPDataRange &dataRange, bool simplify=true);
- void clear();
- bool isEmpty() const { return mDataRanges.isEmpty(); }
- void simplify();
- void enforceType(QCP::SelectionType type);
- bool contains(const QCPDataSelection &other) const;
- QCPDataSelection intersection(const QCPDataRange &other) const;
- QCPDataSelection intersection(const QCPDataSelection &other) const;
- QCPDataSelection inverse(const QCPDataRange &outerRange) const;
- private:
-
- QList<QCPDataRange> mDataRanges;
- inline static bool lessThanDataRangeBegin(const QCPDataRange &a, const QCPDataRange &b) { return a.begin() < b.begin(); }
- };
- Q_DECLARE_METATYPE(QCPDataSelection)
- inline const QCPDataSelection operator+(const QCPDataSelection& a, const QCPDataSelection& b)
- {
- QCPDataSelection result(a);
- result += b;
- return result;
- }
- inline const QCPDataSelection operator+(const QCPDataRange& a, const QCPDataSelection& b)
- {
- QCPDataSelection result(a);
- result += b;
- return result;
- }
- inline const QCPDataSelection operator+(const QCPDataSelection& a, const QCPDataRange& b)
- {
- QCPDataSelection result(a);
- result += b;
- return result;
- }
- inline const QCPDataSelection operator+(const QCPDataRange& a, const QCPDataRange& b)
- {
- QCPDataSelection result(a);
- result += b;
- return result;
- }
- inline const QCPDataSelection operator-(const QCPDataSelection& a, const QCPDataSelection& b)
- {
- QCPDataSelection result(a);
- result -= b;
- return result;
- }
- inline const QCPDataSelection operator-(const QCPDataRange& a, const QCPDataSelection& b)
- {
- QCPDataSelection result(a);
- result -= b;
- return result;
- }
- inline const QCPDataSelection operator-(const QCPDataSelection& a, const QCPDataRange& b)
- {
- QCPDataSelection result(a);
- result -= b;
- return result;
- }
- inline const QCPDataSelection operator-(const QCPDataRange& a, const QCPDataRange& b)
- {
- QCPDataSelection result(a);
- result -= b;
- return result;
- }
- inline QDebug operator<< (QDebug d, const QCPDataRange &dataRange)
- {
- d.nospace() << "QCPDataRange(" << dataRange.begin() << ", " << dataRange.end() << ")";
- return d;
- }
- inline QDebug operator<< (QDebug d, const QCPDataSelection &selection)
- {
- d.nospace() << "QCPDataSelection(";
- for (int i=0; i<selection.dataRangeCount(); ++i)
- {
- if (i != 0)
- d << ", ";
- d << selection.dataRange(i);
- }
- d << ")";
- return d;
- }
- class QCP_LIB_DECL QCPSelectionRect : public QCPLayerable
- {
- Q_OBJECT
- public:
- explicit QCPSelectionRect(QCustomPlot *parentPlot);
- virtual ~QCPSelectionRect() Q_DECL_OVERRIDE;
-
- QRect rect() const { return mRect; }
- QCPRange range(const QCPAxis *axis) const;
- QPen pen() const { return mPen; }
- QBrush brush() const { return mBrush; }
- bool isActive() const { return mActive; }
-
- void setPen(const QPen &pen);
- void setBrush(const QBrush &brush);
-
- Q_SLOT void cancel();
- signals:
- void started(QMouseEvent *event);
- void changed(const QRect &rect, QMouseEvent *event);
- void canceled(const QRect &rect, QInputEvent *event);
- void accepted(const QRect &rect, QMouseEvent *event);
- protected:
-
- QRect mRect;
- QPen mPen;
- QBrush mBrush;
-
- bool mActive;
-
- virtual void startSelection(QMouseEvent *event);
- virtual void moveSelection(QMouseEvent *event);
- virtual void endSelection(QMouseEvent *event);
- virtual void keyPressEvent(QKeyEvent *event);
-
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- friend class QCustomPlot;
- };
- class QCP_LIB_DECL QCPMarginGroup : public QObject
- {
- Q_OBJECT
- public:
- explicit QCPMarginGroup(QCustomPlot *parentPlot);
- virtual ~QCPMarginGroup();
-
- QList<QCPLayoutElement*> elements(QCP::MarginSide side) const { return mChildren.value(side); }
- bool isEmpty() const;
- void clear();
- protected:
-
- QCustomPlot *mParentPlot;
- QHash<QCP::MarginSide, QList<QCPLayoutElement*> > mChildren;
-
- virtual double commonMargin(QCP::MarginSide side) const;
-
- void addChild(QCP::MarginSide side, QCPLayoutElement *element);
- void removeChild(QCP::MarginSide side, QCPLayoutElement *element);
- private:
- Q_DISABLE_COPY(QCPMarginGroup)
- friend class QCPLayoutElement;
- };
- class QCP_LIB_DECL QCPLayoutElement : public QCPLayerable
- {
- Q_OBJECT
-
- Q_PROPERTY(QCPLayout* layout READ layout)
- Q_PROPERTY(QRectF rect READ rect)
- Q_PROPERTY(QRectF outerRect READ outerRect WRITE setOuterRect)
- Q_PROPERTY(QMarginsF margins READ margins WRITE setMargins)
- Q_PROPERTY(QMarginsF minimumMargins READ minimumMargins WRITE setMinimumMargins)
- Q_PROPERTY(QSizeF minimumSize READ minimumSize WRITE setMinimumSize)
- Q_PROPERTY(QSizeF maximumSize READ maximumSize WRITE setMaximumSize)
- Q_PROPERTY(SizeConstraintRect sizeConstraintRect READ sizeConstraintRect WRITE setSizeConstraintRect)
-
- public:
-
- enum UpdatePhase { upPreparation
- ,upMargins
- ,upLayout
- };
- Q_ENUMS(UpdatePhase)
-
- enum SizeConstraintRect { scrInnerRect
- , scrOuterRect
- };
- Q_ENUMS(SizeConstraintRect)
- explicit QCPLayoutElement(QCustomPlot *parentPlot=nullptr);
- virtual ~QCPLayoutElement() Q_DECL_OVERRIDE;
-
- QCPLayout *layout() const { return mParentLayout; }
- QRectF rect() const { return mRect; }
- QRectF outerRect() const { return mOuterRect; }
- QMarginsF margins() const { return mMargins; }
- QMarginsF minimumMargins() const { return mMinimumMargins; }
- QCP::MarginSides autoMargins() const { return mAutoMargins; }
- QSizeF minimumSize() const { return mMinimumSize; }
- QSizeF maximumSize() const { return mMaximumSize; }
- SizeConstraintRect sizeConstraintRect() const { return mSizeConstraintRect; }
- QCPMarginGroup *marginGroup(QCP::MarginSide side) const { return mMarginGroups.value(side, nullptr); }
- QHash<QCP::MarginSide, QCPMarginGroup*> marginGroups() const { return mMarginGroups; }
-
- void setOuterRect(const QRectF &rect);
- void setMargins(const QMarginsF &margins);
- void setMinimumMargins(const QMarginsF &margins);
- void setAutoMargins(QCP::MarginSides sides);
- void setMinimumSize(const QSizeF &size);
- void setMinimumSize(double width, double height);
- void setMaximumSize(const QSizeF &size);
- void setMaximumSize(double width, double height);
- void setSizeConstraintRect(SizeConstraintRect constraintRect);
- void setMarginGroup(QCP::MarginSides sides, QCPMarginGroup *group);
-
- virtual void update(UpdatePhase phase);
- virtual QSizeF minimumOuterSizeHint() const;
- virtual QSizeF maximumOuterSizeHint() const;
- virtual QList<QCPLayoutElement*> elements(bool recursive) const;
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- protected:
-
- QCPLayout *mParentLayout;
- QSizeF mMinimumSize, mMaximumSize;
- SizeConstraintRect mSizeConstraintRect;
- QRectF mRect, mOuterRect;
- QMarginsF mMargins, mMinimumMargins;
- QCP::MarginSides mAutoMargins;
- QHash<QCP::MarginSide, QCPMarginGroup*> mMarginGroups;
-
- virtual double calculateAutoMargin(QCP::MarginSide side);
- virtual void layoutChanged();
-
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE { Q_UNUSED(painter) }
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE { Q_UNUSED(painter) }
- virtual void parentPlotInitialized(QCustomPlot *parentPlot) Q_DECL_OVERRIDE;
- private:
- Q_DISABLE_COPY(QCPLayoutElement)
- friend class QCustomPlot;
- friend class QCPLayout;
- friend class QCPMarginGroup;
- };
- Q_DECLARE_METATYPE(QCPLayoutElement::UpdatePhase)
- class QCP_LIB_DECL QCPLayout : public QCPLayoutElement
- {
- Q_OBJECT
- public:
- explicit QCPLayout();
-
- virtual void update(UpdatePhase phase) Q_DECL_OVERRIDE;
- virtual QList<QCPLayoutElement*> elements(bool recursive) const Q_DECL_OVERRIDE;
-
- virtual int elementCount() const = 0;
- virtual QCPLayoutElement* elementAt(int index) const = 0;
- virtual QCPLayoutElement* takeAt(int index) = 0;
- virtual bool take(QCPLayoutElement* element) = 0;
- virtual void simplify();
-
- bool removeAt(int index);
- bool remove(QCPLayoutElement* element);
- void clear();
- protected:
-
- virtual void updateLayout();
-
- void sizeConstraintsChanged() const;
- void adoptElement(QCPLayoutElement *el);
- void releaseElement(QCPLayoutElement *el);
- QVector<double> getSectionSizes(QVector<double> maxSizes, QVector<double> minSizes, QVector<double> stretchFactors, double totalSize) const;
- static QSizeF getFinalMinimumOuterSize(const QCPLayoutElement *el);
- static QSizeF getFinalMaximumOuterSize(const QCPLayoutElement *el);
- private:
- Q_DISABLE_COPY(QCPLayout)
- friend class QCPLayoutElement;
- };
- class QCP_LIB_DECL QCPLayoutGrid : public QCPLayout
- {
- Q_OBJECT
-
- Q_PROPERTY(int rowCount READ rowCount)
- Q_PROPERTY(int columnCount READ columnCount)
- Q_PROPERTY(QList<double> columnStretchFactors READ columnStretchFactors WRITE setColumnStretchFactors)
- Q_PROPERTY(QList<double> rowStretchFactors READ rowStretchFactors WRITE setRowStretchFactors)
- Q_PROPERTY(int columnSpacing READ columnSpacing WRITE setColumnSpacing)
- Q_PROPERTY(int rowSpacing READ rowSpacing WRITE setRowSpacing)
- Q_PROPERTY(FillOrder fillOrder READ fillOrder WRITE setFillOrder)
- Q_PROPERTY(int wrap READ wrap WRITE setWrap)
-
- public:
-
- enum FillOrder { foRowsFirst
- ,foColumnsFirst
- };
- Q_ENUMS(FillOrder)
- explicit QCPLayoutGrid();
- virtual ~QCPLayoutGrid() Q_DECL_OVERRIDE;
-
- int rowCount() const { return mElements.size(); }
- int columnCount() const { return mElements.size() > 0 ? mElements.first().size() : 0; }
- QList<double> columnStretchFactors() const { return mColumnStretchFactors; }
- QList<double> rowStretchFactors() const { return mRowStretchFactors; }
- int columnSpacing() const { return mColumnSpacing; }
- int rowSpacing() const { return mRowSpacing; }
- int wrap() const { return mWrap; }
- FillOrder fillOrder() const { return mFillOrder; }
-
- void setColumnStretchFactor(int column, double factor);
- void setColumnStretchFactors(const QList<double> &factors);
- void setRowStretchFactor(int row, double factor);
- void setRowStretchFactors(const QList<double> &factors);
- void setColumnSpacing(int pixels);
- void setRowSpacing(int pixels);
- void setWrap(int count);
- void setFillOrder(FillOrder order, bool rearrange=true);
-
- virtual void updateLayout() Q_DECL_OVERRIDE;
- virtual int elementCount() const Q_DECL_OVERRIDE { return rowCount()*columnCount(); }
- virtual QCPLayoutElement* elementAt(int index) const Q_DECL_OVERRIDE;
- virtual QCPLayoutElement* takeAt(int index) Q_DECL_OVERRIDE;
- virtual bool take(QCPLayoutElement* element) Q_DECL_OVERRIDE;
- virtual QList<QCPLayoutElement*> elements(bool recursive) const Q_DECL_OVERRIDE;
- virtual void simplify() Q_DECL_OVERRIDE;
- virtual QSizeF minimumOuterSizeHint() const Q_DECL_OVERRIDE;
- virtual QSizeF maximumOuterSizeHint() const Q_DECL_OVERRIDE;
-
- QCPLayoutElement *element(int row, int column) const;
- bool addElement(int row, int column, QCPLayoutElement *element);
- bool addElement(QCPLayoutElement *element);
- bool hasElement(int row, int column);
- void expandTo(int newRowCount, int newColumnCount);
- void insertRow(int newIndex);
- void insertColumn(int newIndex);
- int rowColToIndex(int row, int column) const;
- void indexToRowCol(int index, int &row, int &column) const;
- protected:
-
- QList<QList<QCPLayoutElement*> > mElements;
- QList<double> mColumnStretchFactors;
- QList<double> mRowStretchFactors;
- int mColumnSpacing, mRowSpacing;
- int mWrap;
- FillOrder mFillOrder;
-
- void getMinimumRowColSizes(QVector<double> *minColWidths, QVector<double> *minRowHeights) const;
- void getMaximumRowColSizes(QVector<double> *maxColWidths, QVector<double> *maxRowHeights) const;
- private:
- Q_DISABLE_COPY(QCPLayoutGrid)
- };
- Q_DECLARE_METATYPE(QCPLayoutGrid::FillOrder)
- class QCP_LIB_DECL QCPLayoutInset : public QCPLayout
- {
- Q_OBJECT
- public:
-
- enum InsetPlacement { ipFree
- ,ipBorderAligned
- };
- Q_ENUMS(InsetPlacement)
- explicit QCPLayoutInset();
- virtual ~QCPLayoutInset() Q_DECL_OVERRIDE;
-
- InsetPlacement insetPlacement(int index) const;
- Qt::Alignment insetAlignment(int index) const;
- QRectF insetRect(int index) const;
-
- void setInsetPlacement(int index, InsetPlacement placement);
- void setInsetAlignment(int index, Qt::Alignment alignment);
- void setInsetRect(int index, const QRectF &rect);
-
- virtual void updateLayout() Q_DECL_OVERRIDE;
- virtual int elementCount() const Q_DECL_OVERRIDE;
- virtual QCPLayoutElement* elementAt(int index) const Q_DECL_OVERRIDE;
- virtual QCPLayoutElement* takeAt(int index) Q_DECL_OVERRIDE;
- virtual bool take(QCPLayoutElement* element) Q_DECL_OVERRIDE;
- virtual void simplify() Q_DECL_OVERRIDE {}
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
-
- void addElement(QCPLayoutElement *element, Qt::Alignment alignment);
- void addElement(QCPLayoutElement *element, const QRectF &rect);
- protected:
-
- QList<QCPLayoutElement*> mElements;
- QList<InsetPlacement> mInsetPlacement;
- QList<Qt::Alignment> mInsetAlignment;
- QList<QRectF> mInsetRect;
- private:
- Q_DISABLE_COPY(QCPLayoutInset)
- };
- Q_DECLARE_METATYPE(QCPLayoutInset::InsetPlacement)
- class QCP_LIB_DECL QCPLineEnding
- {
- Q_GADGET
- public:
-
- enum EndingStyle { esNone
- ,esFlatArrow
- ,esSpikeArrow
- ,esLineArrow
- ,esDisc
- ,esSquare
- ,esDiamond
- ,esBar
- ,esHalfBar
- ,esSkewedBar
- };
- Q_ENUMS(EndingStyle)
- QCPLineEnding();
- QCPLineEnding(EndingStyle style, double width=8, double length=10, bool inverted=false);
-
- EndingStyle style() const { return mStyle; }
- double width() const { return mWidth; }
- double length() const { return mLength; }
- bool inverted() const { return mInverted; }
-
- void setStyle(EndingStyle style);
- void setWidth(double width);
- void setLength(double length);
- void setInverted(bool inverted);
-
- double boundingDistance() const;
- double realLength() const;
- void draw(QCPPainter *painter, const QCPVector2D &pos, const QCPVector2D &dir) const;
- void draw(QCPPainter *painter, const QCPVector2D &pos, double angle) const;
- protected:
-
- EndingStyle mStyle;
- double mWidth, mLength;
- bool mInverted;
- };
- Q_DECLARE_TYPEINFO(QCPLineEnding, Q_MOVABLE_TYPE);
- Q_DECLARE_METATYPE(QCPLineEnding::EndingStyle)
- class QCP_LIB_DECL QCPLabelPainterPrivate
- {
- Q_GADGET
- public:
-
- enum AnchorMode { amRectangular
- ,amSkewedUpright
- ,amSkewedRotated
- };
- Q_ENUMS(AnchorMode)
-
- enum AnchorReferenceType { artNormal
- ,artTangent
- };
- Q_ENUMS(AnchorReferenceType)
-
- enum AnchorSide { asLeft
- ,asRight
- ,asTop
- ,asBottom
- ,asTopLeft
- ,asTopRight
- ,asBottomRight
- ,asBottomLeft
- };
- Q_ENUMS(AnchorSide)
- explicit QCPLabelPainterPrivate(QCustomPlot *parentPlot);
- virtual ~QCPLabelPainterPrivate();
-
- void setAnchorSide(AnchorSide side);
- void setAnchorMode(AnchorMode mode);
- void setAnchorReference(const QPointF &pixelPoint);
- void setAnchorReferenceType(AnchorReferenceType type);
- void setFont(const QFont &font);
- void setColor(const QColor &color);
- void setPadding(int padding);
- void setRotation(double rotation);
- void setSubstituteExponent(bool enabled);
- void setMultiplicationSymbol(QChar symbol);
- void setAbbreviateDecimalPowers(bool enabled);
- void setCacheSize(int labelCount);
-
- AnchorMode anchorMode() const { return mAnchorMode; }
- AnchorSide anchorSide() const { return mAnchorSide; }
- QPointF anchorReference() const { return mAnchorReference; }
- AnchorReferenceType anchorReferenceType() const { return mAnchorReferenceType; }
- QFont font() const { return mFont; }
- QColor color() const { return mColor; }
- int padding() const { return mPadding; }
- double rotation() const { return mRotation; }
- bool substituteExponent() const { return mSubstituteExponent; }
- QChar multiplicationSymbol() const { return mMultiplicationSymbol; }
- bool abbreviateDecimalPowers() const { return mAbbreviateDecimalPowers; }
- int cacheSize() const;
-
-
- void drawTickLabel(QCPPainter *painter, const QPointF &tickPos, const QString &text);
- void clearCache();
-
- static const QChar SymbolDot;
- static const QChar SymbolCross;
- protected:
- struct CachedLabel
- {
- QPoint offset;
- QPixmap pixmap;
- };
- struct LabelData
- {
- AnchorSide side;
- double rotation;
- QTransform transform;
- QString basePart, expPart, suffixPart;
- QRect baseBounds, expBounds, suffixBounds;
- QRect totalBounds;
- QRect rotatedTotalBounds;
- QFont baseFont, expFont;
- QColor color;
- };
-
- AnchorMode mAnchorMode;
- AnchorSide mAnchorSide;
- QPointF mAnchorReference;
- AnchorReferenceType mAnchorReferenceType;
- QFont mFont;
- QColor mColor;
- int mPadding;
- double mRotation;
- bool mSubstituteExponent;
- QChar mMultiplicationSymbol;
- bool mAbbreviateDecimalPowers;
-
- QCustomPlot *mParentPlot;
- QByteArray mLabelParameterHash;
- QCache<QString, CachedLabel> mLabelCache;
- QRect mAxisSelectionBox, mTickLabelsSelectionBox, mLabelSelectionBox;
- int mLetterCapHeight, mLetterDescent;
-
- virtual void drawLabelMaybeCached(QCPPainter *painter, const QFont &font, const QColor &color, const QPointF &pos, AnchorSide side, double rotation, const QString &text);
- virtual QByteArray generateLabelParameterHash() const;
-
- QPointF getAnchorPos(const QPointF &tickPos);
- void drawText(QCPPainter *painter, const QPointF &pos, const LabelData &labelData) const;
- LabelData getTickLabelData(const QFont &font, const QColor &color, double rotation, AnchorSide side, const QString &text) const;
- void applyAnchorTransform(LabelData &labelData) const;
-
- CachedLabel *createCachedLabel(const LabelData &labelData) const;
- QByteArray cacheKey(const QString &text, const QColor &color, double rotation, AnchorSide side) const;
- AnchorSide skewedAnchorSide(const QPointF &tickPos, double sideExpandHorz, double sideExpandVert) const;
- AnchorSide rotationCorrectedSide(AnchorSide side, double rotation) const;
- void analyzeFontMetrics();
- };
- Q_DECLARE_METATYPE(QCPLabelPainterPrivate::AnchorMode)
- Q_DECLARE_METATYPE(QCPLabelPainterPrivate::AnchorSide)
- class QCP_LIB_DECL QCPAxisTicker
- {
- Q_GADGET
- public:
-
- enum TickStepStrategy
- {
- tssReadability
- ,tssMeetTickCount
- };
- Q_ENUMS(TickStepStrategy)
- QCPAxisTicker();
- virtual ~QCPAxisTicker();
-
- TickStepStrategy tickStepStrategy() const { return mTickStepStrategy; }
- int tickCount() const { return mTickCount; }
- double tickOrigin() const { return mTickOrigin; }
-
- void setTickStepStrategy(TickStepStrategy strategy);
- void setTickCount(int count);
- void setTickOrigin(double origin);
-
- virtual void generate(const QCPRange &range, const QLocale &locale, QChar formatChar, int precision, QVector<double> &ticks, QVector<double> *subTicks, QVector<QString> *tickLabels);
- protected:
-
- TickStepStrategy mTickStepStrategy;
- int mTickCount;
- double mTickOrigin;
-
- virtual double getTickStep(const QCPRange &range);
- virtual int getSubTickCount(double tickStep);
- virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision);
- virtual QVector<double> createTickVector(double tickStep, const QCPRange &range);
- virtual QVector<double> createSubTickVector(int subTickCount, const QVector<double> &ticks);
- virtual QVector<QString> createLabelVector(const QVector<double> &ticks, const QLocale &locale, QChar formatChar, int precision);
-
- void trimTicks(const QCPRange &range, QVector<double> &ticks, bool keepOneOutlier) const;
- double pickClosest(double target, const QVector<double> &candidates) const;
- double getMantissa(double input, double *magnitude=nullptr) const;
- double cleanMantissa(double input) const;
- private:
- Q_DISABLE_COPY(QCPAxisTicker)
- };
- Q_DECLARE_METATYPE(QCPAxisTicker::TickStepStrategy)
- Q_DECLARE_METATYPE(QSharedPointer<QCPAxisTicker>)
- class QCP_LIB_DECL QCPAxisTickerDateTime : public QCPAxisTicker
- {
- public:
- QCPAxisTickerDateTime();
-
- QString dateTimeFormat() const { return mDateTimeFormat; }
- Qt::TimeSpec dateTimeSpec() const { return mDateTimeSpec; }
- # if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)
- QTimeZone timeZone() const { return mTimeZone; }
- #endif
-
- void setDateTimeFormat(const QString &format);
- void setDateTimeSpec(Qt::TimeSpec spec);
- # if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)
- void setTimeZone(const QTimeZone &zone);
- # endif
- void setTickOrigin(double origin);
- void setTickOrigin(const QDateTime &origin);
-
- static QDateTime keyToDateTime(double key);
- static double dateTimeToKey(const QDateTime &dateTime);
- static double dateTimeToKey(const QDate &date, Qt::TimeSpec timeSpec=Qt::LocalTime);
- protected:
-
- QString mDateTimeFormat;
- Qt::TimeSpec mDateTimeSpec;
- # if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)
- QTimeZone mTimeZone;
- # endif
-
- enum DateStrategy {dsNone, dsUniformTimeInDay, dsUniformDayInMonth} mDateStrategy;
-
- virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
- virtual int getSubTickCount(double tickStep) Q_DECL_OVERRIDE;
- virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision) Q_DECL_OVERRIDE;
- virtual QVector<double> createTickVector(double tickStep, const QCPRange &range) Q_DECL_OVERRIDE;
- };
- class QCP_LIB_DECL QCPAxisTickerTime : public QCPAxisTicker
- {
- Q_GADGET
- public:
-
- enum TimeUnit { tuMilliseconds
- ,tuSeconds
- ,tuMinutes
- ,tuHours
- ,tuDays
- };
- Q_ENUMS(TimeUnit)
- QCPAxisTickerTime();
-
- QString timeFormat() const { return mTimeFormat; }
- int fieldWidth(TimeUnit unit) const { return mFieldWidth.value(unit); }
-
- void setTimeFormat(const QString &format);
- void setFieldWidth(TimeUnit unit, int width);
- protected:
-
- QString mTimeFormat;
- QHash<TimeUnit, int> mFieldWidth;
-
- TimeUnit mSmallestUnit, mBiggestUnit;
- QHash<TimeUnit, QString> mFormatPattern;
-
- virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
- virtual int getSubTickCount(double tickStep) Q_DECL_OVERRIDE;
- virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision) Q_DECL_OVERRIDE;
-
- void replaceUnit(QString &text, TimeUnit unit, int value) const;
- };
- Q_DECLARE_METATYPE(QCPAxisTickerTime::TimeUnit)
- class QCP_LIB_DECL QCPAxisTickerFixed : public QCPAxisTicker
- {
- Q_GADGET
- public:
-
- enum ScaleStrategy { ssNone
- ,ssMultiples
- ,ssPowers
- };
- Q_ENUMS(ScaleStrategy)
- QCPAxisTickerFixed();
-
- double tickStep() const { return mTickStep; }
- ScaleStrategy scaleStrategy() const { return mScaleStrategy; }
-
- void setTickStep(double step);
- void setScaleStrategy(ScaleStrategy strategy);
- protected:
-
- double mTickStep;
- ScaleStrategy mScaleStrategy;
-
- virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
- };
- Q_DECLARE_METATYPE(QCPAxisTickerFixed::ScaleStrategy)
- class QCP_LIB_DECL QCPAxisTickerText : public QCPAxisTicker
- {
- public:
- QCPAxisTickerText();
-
- QMap<double, QString> &ticks() { return mTicks; }
- int subTickCount() const { return mSubTickCount; }
-
- void setTicks(const QMap<double, QString> &ticks);
- void setTicks(const QVector<double> &positions, const QVector<QString> &labels);
- void setSubTickCount(int subTicks);
-
- void clear();
- void addTick(double position, const QString &label);
- void addTicks(const QMap<double, QString> &ticks);
- void addTicks(const QVector<double> &positions, const QVector<QString> &labels);
- protected:
-
- QMap<double, QString> mTicks;
- int mSubTickCount;
-
- virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
- virtual int getSubTickCount(double tickStep) Q_DECL_OVERRIDE;
- virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision) Q_DECL_OVERRIDE;
- virtual QVector<double> createTickVector(double tickStep, const QCPRange &range) Q_DECL_OVERRIDE;
- };
- class QCP_LIB_DECL QCPAxisTickerPi : public QCPAxisTicker
- {
- Q_GADGET
- public:
-
- enum FractionStyle { fsFloatingPoint
- ,fsAsciiFractions
- ,fsUnicodeFractions
- };
- Q_ENUMS(FractionStyle)
- QCPAxisTickerPi();
-
- QString piSymbol() const { return mPiSymbol; }
- double piValue() const { return mPiValue; }
- bool periodicity() const { return mPeriodicity; }
- FractionStyle fractionStyle() const { return mFractionStyle; }
-
- void setPiSymbol(QString symbol);
- void setPiValue(double pi);
- void setPeriodicity(int multiplesOfPi);
- void setFractionStyle(FractionStyle style);
- protected:
-
- QString mPiSymbol;
- double mPiValue;
- int mPeriodicity;
- FractionStyle mFractionStyle;
-
- double mPiTickStep;
-
- virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
- virtual int getSubTickCount(double tickStep) Q_DECL_OVERRIDE;
- virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision) Q_DECL_OVERRIDE;
-
- void simplifyFraction(int &numerator, int &denominator) const;
- QString fractionToString(int numerator, int denominator) const;
- QString unicodeFraction(int numerator, int denominator) const;
- QString unicodeSuperscript(int number) const;
- QString unicodeSubscript(int number) const;
- };
- Q_DECLARE_METATYPE(QCPAxisTickerPi::FractionStyle)
- class QCP_LIB_DECL QCPAxisTickerLog : public QCPAxisTicker
- {
- public:
- QCPAxisTickerLog();
-
- double logBase() const { return mLogBase; }
- int subTickCount() const { return mSubTickCount; }
-
- void setLogBase(double base);
- void setSubTickCount(int subTicks);
- protected:
-
- double mLogBase;
- int mSubTickCount;
-
- double mLogBaseLnInv;
-
- virtual int getSubTickCount(double tickStep) Q_DECL_OVERRIDE;
- virtual QVector<double> createTickVector(double tickStep, const QCPRange &range) Q_DECL_OVERRIDE;
- };
- class QCP_LIB_DECL QCPGrid :public QCPLayerable
- {
- Q_OBJECT
-
- Q_PROPERTY(bool subGridVisible READ subGridVisible WRITE setSubGridVisible)
- Q_PROPERTY(bool antialiasedSubGrid READ antialiasedSubGrid WRITE setAntialiasedSubGrid)
- Q_PROPERTY(bool antialiasedZeroLine READ antialiasedZeroLine WRITE setAntialiasedZeroLine)
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QPen subGridPen READ subGridPen WRITE setSubGridPen)
- Q_PROPERTY(QPen zeroLinePen READ zeroLinePen WRITE setZeroLinePen)
-
- public:
- explicit QCPGrid(QCPAxis *parentAxis);
-
- bool subGridVisible() const { return mSubGridVisible; }
- bool antialiasedSubGrid() const { return mAntialiasedSubGrid; }
- bool antialiasedZeroLine() const { return mAntialiasedZeroLine; }
- QPen pen() const { return mPen; }
- QPen subGridPen() const { return mSubGridPen; }
- QPen zeroLinePen() const { return mZeroLinePen; }
-
- void setSubGridVisible(bool visible);
- void setAntialiasedSubGrid(bool enabled);
- void setAntialiasedZeroLine(bool enabled);
- void setPen(const QPen &pen);
- void setSubGridPen(const QPen &pen);
- void setZeroLinePen(const QPen &pen);
- protected:
-
- bool mSubGridVisible;
- bool mAntialiasedSubGrid, mAntialiasedZeroLine;
- QPen mPen, mSubGridPen, mZeroLinePen;
-
- QCPAxis *mParentAxis;
-
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
-
- void drawGridLines(QCPPainter *painter) const;
- void drawSubGridLines(QCPPainter *painter) const;
- friend class QCPAxis;
- };
- class QCP_LIB_DECL QCPAxis : public QCPLayerable
- {
- Q_OBJECT
-
- Q_PROPERTY(AxisType axisType READ axisType)
- Q_PROPERTY(QCPAxisRect* axisRect READ axisRect)
- Q_PROPERTY(ScaleType scaleType READ scaleType WRITE setScaleType NOTIFY scaleTypeChanged)
- Q_PROPERTY(QCPRange range READ range WRITE setRange NOTIFY rangeChanged)
- Q_PROPERTY(bool rangeReversed READ rangeReversed WRITE setRangeReversed)
- Q_PROPERTY(QSharedPointer<QCPAxisTicker> ticker READ ticker WRITE setTicker)
- Q_PROPERTY(bool ticks READ ticks WRITE setTicks)
- Q_PROPERTY(bool tickLabels READ tickLabels WRITE setTickLabels)
- Q_PROPERTY(int tickLabelPadding READ tickLabelPadding WRITE setTickLabelPadding)
- Q_PROPERTY(QFont tickLabelFont READ tickLabelFont WRITE setTickLabelFont)
- Q_PROPERTY(QColor tickLabelColor READ tickLabelColor WRITE setTickLabelColor)
- Q_PROPERTY(double tickLabelRotation READ tickLabelRotation WRITE setTickLabelRotation)
- Q_PROPERTY(LabelSide tickLabelSide READ tickLabelSide WRITE setTickLabelSide)
- Q_PROPERTY(QString numberFormat READ numberFormat WRITE setNumberFormat)
- Q_PROPERTY(int numberPrecision READ numberPrecision WRITE setNumberPrecision)
- Q_PROPERTY(QVector<double> tickVector READ tickVector)
- Q_PROPERTY(QVector<QString> tickVectorLabels READ tickVectorLabels)
- Q_PROPERTY(int tickLengthIn READ tickLengthIn WRITE setTickLengthIn)
- Q_PROPERTY(int tickLengthOut READ tickLengthOut WRITE setTickLengthOut)
- Q_PROPERTY(bool subTicks READ subTicks WRITE setSubTicks)
- Q_PROPERTY(int subTickLengthIn READ subTickLengthIn WRITE setSubTickLengthIn)
- Q_PROPERTY(int subTickLengthOut READ subTickLengthOut WRITE setSubTickLengthOut)
- Q_PROPERTY(QPen basePen READ basePen WRITE setBasePen)
- Q_PROPERTY(QPen tickPen READ tickPen WRITE setTickPen)
- Q_PROPERTY(QPen subTickPen READ subTickPen WRITE setSubTickPen)
- Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont)
- Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor)
- Q_PROPERTY(QString label READ label WRITE setLabel)
- Q_PROPERTY(int labelPadding READ labelPadding WRITE setLabelPadding)
- Q_PROPERTY(int padding READ padding WRITE setPadding)
- Q_PROPERTY(int offset READ offset WRITE setOffset)
- Q_PROPERTY(SelectableParts selectedParts READ selectedParts WRITE setSelectedParts NOTIFY selectionChanged)
- Q_PROPERTY(SelectableParts selectableParts READ selectableParts WRITE setSelectableParts NOTIFY selectableChanged)
- Q_PROPERTY(QFont selectedTickLabelFont READ selectedTickLabelFont WRITE setSelectedTickLabelFont)
- Q_PROPERTY(QFont selectedLabelFont READ selectedLabelFont WRITE setSelectedLabelFont)
- Q_PROPERTY(QColor selectedTickLabelColor READ selectedTickLabelColor WRITE setSelectedTickLabelColor)
- Q_PROPERTY(QColor selectedLabelColor READ selectedLabelColor WRITE setSelectedLabelColor)
- Q_PROPERTY(QPen selectedBasePen READ selectedBasePen WRITE setSelectedBasePen)
- Q_PROPERTY(QPen selectedTickPen READ selectedTickPen WRITE setSelectedTickPen)
- Q_PROPERTY(QPen selectedSubTickPen READ selectedSubTickPen WRITE setSelectedSubTickPen)
- Q_PROPERTY(QCPLineEnding lowerEnding READ lowerEnding WRITE setLowerEnding)
- Q_PROPERTY(QCPLineEnding upperEnding READ upperEnding WRITE setUpperEnding)
- Q_PROPERTY(QCPGrid* grid READ grid)
-
- public:
-
- enum AxisType { atLeft = 0x01
- ,atRight = 0x02
- ,atTop = 0x04
- ,atBottom = 0x08
- };
- Q_ENUMS(AxisType)
- Q_FLAGS(AxisTypes)
- Q_DECLARE_FLAGS(AxisTypes, AxisType)
-
- enum LabelSide { lsInside
- ,lsOutside
- };
- Q_ENUMS(LabelSide)
-
- enum ScaleType { stLinear
- ,stLogarithmic
- };
- Q_ENUMS(ScaleType)
-
- enum SelectablePart { spNone = 0
- ,spAxis = 0x001
- ,spTickLabels = 0x002
- ,spAxisLabel = 0x004
- };
- Q_ENUMS(SelectablePart)
- Q_FLAGS(SelectableParts)
- Q_DECLARE_FLAGS(SelectableParts, SelectablePart)
- explicit QCPAxis(QCPAxisRect *parent, AxisType type);
- virtual ~QCPAxis() Q_DECL_OVERRIDE;
-
- AxisType axisType() const { return mAxisType; }
- QCPAxisRect *axisRect() const { return mAxisRect; }
- ScaleType scaleType() const { return mScaleType; }
- const QCPRange range() const { return mRange; }
- bool rangeReversed() const { return mRangeReversed; }
- QSharedPointer<QCPAxisTicker> ticker() const { return mTicker; }
- bool ticks() const { return mTicks; }
- bool tickLabels() const { return mTickLabels; }
- int tickLabelPadding() const;
- QFont tickLabelFont() const { return mTickLabelFont; }
- QColor tickLabelColor() const { return mTickLabelColor; }
- double tickLabelRotation() const;
- LabelSide tickLabelSide() const;
- QString numberFormat() const;
- int numberPrecision() const { return mNumberPrecision; }
- QVector<double> tickVector() const { return mTickVector; }
- QVector<QString> tickVectorLabels() const { return mTickVectorLabels; }
- int tickLengthIn() const;
- int tickLengthOut() const;
- bool subTicks() const { return mSubTicks; }
- int subTickLengthIn() const;
- int subTickLengthOut() const;
- QPen basePen() const { return mBasePen; }
- QPen tickPen() const { return mTickPen; }
- QPen subTickPen() const { return mSubTickPen; }
- QFont labelFont() const { return mLabelFont; }
- QColor labelColor() const { return mLabelColor; }
- QString label() const { return mLabel; }
- int labelPadding() const;
- int padding() const { return mPadding; }
- int offset() const;
- SelectableParts selectedParts() const { return mSelectedParts; }
- SelectableParts selectableParts() const { return mSelectableParts; }
- QFont selectedTickLabelFont() const { return mSelectedTickLabelFont; }
- QFont selectedLabelFont() const { return mSelectedLabelFont; }
- QColor selectedTickLabelColor() const { return mSelectedTickLabelColor; }
- QColor selectedLabelColor() const { return mSelectedLabelColor; }
- QPen selectedBasePen() const { return mSelectedBasePen; }
- QPen selectedTickPen() const { return mSelectedTickPen; }
- QPen selectedSubTickPen() const { return mSelectedSubTickPen; }
- QCPLineEnding lowerEnding() const;
- QCPLineEnding upperEnding() const;
- QCPGrid *grid() const { return mGrid; }
-
- Q_SLOT void setScaleType(QCPAxis::ScaleType type);
- Q_SLOT void setRange(const QCPRange &range);
- void setRange(double lower, double upper);
- void setRange(double position, double size, Qt::AlignmentFlag alignment);
- void setRangeLower(double lower);
- void setRangeUpper(double upper);
- void setRangeReversed(bool reversed);
- void setTicker(QSharedPointer<QCPAxisTicker> ticker);
- void setTicks(bool show);
- void setTickLabels(bool show);
- void setTickLabelPadding(int padding);
- void setTickLabelFont(const QFont &font);
- void setTickLabelColor(const QColor &color);
- void setTickLabelRotation(double degrees);
- void setTickLabelSide(LabelSide side);
- void setNumberFormat(const QString &formatCode);
- void setNumberPrecision(int precision);
- void setTickLength(int inside, int outside=0);
- void setTickLengthIn(int inside);
- void setTickLengthOut(int outside);
- void setSubTicks(bool show);
- void setSubTickLength(int inside, int outside=0);
- void setSubTickLengthIn(int inside);
- void setSubTickLengthOut(int outside);
- void setBasePen(const QPen &pen);
- void setTickPen(const QPen &pen);
- void setSubTickPen(const QPen &pen);
- void setLabelFont(const QFont &font);
- void setLabelColor(const QColor &color);
- void setLabel(const QString &str);
- void setLabelPadding(int padding);
- void setPadding(int padding);
- void setOffset(int offset);
- void setSelectedTickLabelFont(const QFont &font);
- void setSelectedLabelFont(const QFont &font);
- void setSelectedTickLabelColor(const QColor &color);
- void setSelectedLabelColor(const QColor &color);
- void setSelectedBasePen(const QPen &pen);
- void setSelectedTickPen(const QPen &pen);
- void setSelectedSubTickPen(const QPen &pen);
- Q_SLOT void setSelectableParts(const QCPAxis::SelectableParts &selectableParts);
- Q_SLOT void setSelectedParts(const QCPAxis::SelectableParts &selectedParts);
- void setLowerEnding(const QCPLineEnding &ending);
- void setUpperEnding(const QCPLineEnding &ending);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
-
- Qt::Orientation orientation() const { return mOrientation; }
- int pixelOrientation() const { return rangeReversed() != (orientation()==Qt::Vertical) ? -1 : 1; }
- void moveRange(double diff);
- void scaleRange(double factor);
- void scaleRange(double factor, double center);
- void setScaleRatio(const QCPAxis *otherAxis, double ratio=1.0);
- void rescale(bool onlyVisiblePlottables=false);
- double pixelToCoord(double value) const;
- double coordToPixel(double value) const;
- SelectablePart getPartAt(const QPointF &pos) const;
- QList<QCPAbstractPlottable*> plottables() const;
- QList<QCPGraph*> graphs() const;
- QList<QCPAbstractItem*> items() const;
- static AxisType marginSideToAxisType(QCP::MarginSide side);
- static Qt::Orientation orientation(AxisType type) { return type==atBottom||type==atTop ? Qt::Horizontal : Qt::Vertical; }
- static AxisType opposite(AxisType type);
- signals:
- void rangeChanged(const QCPRange &newRange);
- void rangeChanged(const QCPRange &newRange, const QCPRange &oldRange);
- void scaleTypeChanged(QCPAxis::ScaleType scaleType);
- void selectionChanged(const QCPAxis::SelectableParts &parts);
- void selectableChanged(const QCPAxis::SelectableParts &parts);
- protected:
-
-
- AxisType mAxisType;
- QCPAxisRect *mAxisRect;
-
- int mPadding;
- Qt::Orientation mOrientation;
- SelectableParts mSelectableParts, mSelectedParts;
- QPen mBasePen, mSelectedBasePen;
-
-
-
- QString mLabel;
- QFont mLabelFont, mSelectedLabelFont;
- QColor mLabelColor, mSelectedLabelColor;
-
-
- bool mTickLabels;
-
- QFont mTickLabelFont, mSelectedTickLabelFont;
- QColor mTickLabelColor, mSelectedTickLabelColor;
- int mNumberPrecision;
- QLatin1Char mNumberFormatChar;
- bool mNumberBeautifulPowers;
-
-
- bool mTicks;
- bool mSubTicks;
-
- QPen mTickPen, mSelectedTickPen;
- QPen mSubTickPen, mSelectedSubTickPen;
-
- QCPRange mRange;
- bool mRangeReversed;
- ScaleType mScaleType;
-
- QCPGrid *mGrid;
- QCPAxisPainterPrivate *mAxisPainter;
- QSharedPointer<QCPAxisTicker> mTicker;
- QVector<double> mTickVector;
- QVector<QString> mTickVectorLabels;
- QVector<double> mSubTickVector;
- bool mCachedMarginValid;
- int mCachedMargin;
- bool mDragging;
- QCPRange mDragStartRange;
- QCP::AntialiasedElements mAADragBackup, mNotAADragBackup;
-
- virtual int calculateMargin();
-
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
-
- virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
- virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
-
- virtual void mousePressEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
- virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
-
- void setupTickVectors();
- QPen getBasePen() const;
- QPen getTickPen() const;
- QPen getSubTickPen() const;
- QFont getTickLabelFont() const;
- QFont getLabelFont() const;
- QColor getTickLabelColor() const;
- QColor getLabelColor() const;
- private:
- Q_DISABLE_COPY(QCPAxis)
- friend class QCustomPlot;
- friend class QCPGrid;
- friend class QCPAxisRect;
- };
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCPAxis::SelectableParts)
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCPAxis::AxisTypes)
- Q_DECLARE_METATYPE(QCPAxis::AxisType)
- Q_DECLARE_METATYPE(QCPAxis::LabelSide)
- Q_DECLARE_METATYPE(QCPAxis::ScaleType)
- Q_DECLARE_METATYPE(QCPAxis::SelectablePart)
- class QCPAxisPainterPrivate
- {
- public:
- explicit QCPAxisPainterPrivate(QCustomPlot *parentPlot);
- virtual ~QCPAxisPainterPrivate();
- virtual void draw(QCPPainter *painter);
- virtual int size();
- void clearCache();
- QRectF axisSelectionBox() const { return mAxisSelectionBox; }
- QRectF tickLabelsSelectionBox() const { return mTickLabelsSelectionBox; }
- QRectF labelSelectionBox() const { return mLabelSelectionBox; }
-
- QCPAxis::AxisType type;
- QPen basePen;
- QCPLineEnding lowerEnding, upperEnding;
- int labelPadding;
- QFont labelFont;
- QColor labelColor;
- QString label;
- int tickLabelPadding;
- double tickLabelRotation;
- QCPAxis::LabelSide tickLabelSide;
- bool substituteExponent;
- bool numberMultiplyCross;
- int tickLengthIn, tickLengthOut, subTickLengthIn, subTickLengthOut;
- QPen tickPen, subTickPen;
- QFont tickLabelFont;
- QColor tickLabelColor;
- QRectF axisRect, viewportRect;
- double offset;
- bool abbreviateDecimalPowers;
- bool reversedEndings;
- QVector<double> subTickPositions;
- QVector<double> tickPositions;
- QVector<QString> tickLabels;
- protected:
- struct CachedLabel
- {
- QPointF offset;
- QPixmap pixmap;
- };
- struct TickLabelData
- {
- QString basePart, expPart, suffixPart;
- QRect baseBounds, expBounds, suffixBounds, totalBounds, rotatedTotalBounds;
- QFont baseFont, expFont;
- };
- QCustomPlot *mParentPlot;
- QByteArray mLabelParameterHash;
- QCache<QString, CachedLabel> mLabelCache;
- QRectF mAxisSelectionBox, mTickLabelsSelectionBox, mLabelSelectionBox;
- virtual QByteArray generateLabelParameterHash() const;
- virtual void placeTickLabel(QCPPainter *painter, double position, int distanceToAxis, const QString &text, QSize *tickLabelsSize);
- virtual void drawTickLabel(QCPPainter *painter, double x, double y, const TickLabelData &labelData) const;
- virtual TickLabelData getTickLabelData(const QFont &font, const QString &text) const;
- virtual QPointF getTickLabelDrawOffset(const TickLabelData &labelData) const;
- virtual void getMaxTickLabelSize(const QFont &font, const QString &text, QSize *tickLabelsSize) const;
- };
- class QCP_LIB_DECL QCPScatterStyle
- {
- Q_GADGET
- public:
-
- enum ScatterProperty { spNone = 0x00
- ,spPen = 0x01
- ,spBrush = 0x02
- ,spSize = 0x04
- ,spShape = 0x08
- ,spAll = 0xFF
- };
- Q_ENUMS(ScatterProperty)
- Q_FLAGS(ScatterProperties)
- Q_DECLARE_FLAGS(ScatterProperties, ScatterProperty)
-
- enum ScatterShape { ssNone
- ,ssDot
- ,ssCross
- ,ssPlus
- ,ssCircle
- ,ssDisc
- ,ssSquare
- ,ssDiamond
- ,ssStar
- ,ssTriangle
- ,ssTriangleInverted
- ,ssCrossSquare
- ,ssPlusSquare
- ,ssCrossCircle
- ,ssPlusCircle
- ,ssPeace
- ,ssPixmap
- ,ssCustom
- };
- Q_ENUMS(ScatterShape)
- QCPScatterStyle();
- QCPScatterStyle(ScatterShape shape, double size=6);
- QCPScatterStyle(ScatterShape shape, const QColor &color, double size);
- QCPScatterStyle(ScatterShape shape, const QColor &color, const QColor &fill, double size);
- QCPScatterStyle(ScatterShape shape, const QPen &pen, const QBrush &brush, double size);
- QCPScatterStyle(const QPixmap &pixmap);
- QCPScatterStyle(const QPainterPath &customPath, const QPen &pen, const QBrush &brush=Qt::NoBrush, double size=6);
-
- double size() const { return mSize; }
- ScatterShape shape() const { return mShape; }
- QPen pen() const { return mPen; }
- QBrush brush() const { return mBrush; }
- QPixmap pixmap() const { return mPixmap; }
- QPainterPath customPath() const { return mCustomPath; }
-
- void setFromOther(const QCPScatterStyle &other, ScatterProperties properties);
- void setSize(double size);
- void setShape(ScatterShape shape);
- void setPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setPixmap(const QPixmap &pixmap);
- void setCustomPath(const QPainterPath &customPath);
-
- bool isNone() const { return mShape == ssNone; }
- bool isPenDefined() const { return mPenDefined; }
- void undefinePen();
- void applyTo(QCPPainter *painter, const QPen &defaultPen) const;
- void drawShape(QCPPainter *painter, const QPointF &pos) const;
- void drawShape(QCPPainter *painter, double x, double y) const;
- protected:
-
- double mSize;
- ScatterShape mShape;
- QPen mPen;
- QBrush mBrush;
- QPixmap mPixmap;
- QPainterPath mCustomPath;
-
- bool mPenDefined;
- };
- Q_DECLARE_TYPEINFO(QCPScatterStyle, Q_MOVABLE_TYPE);
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCPScatterStyle::ScatterProperties)
- Q_DECLARE_METATYPE(QCPScatterStyle::ScatterProperty)
- Q_DECLARE_METATYPE(QCPScatterStyle::ScatterShape)
- template <class DataType>
- inline bool qcpLessThanSortKey(const DataType &a, const DataType &b) { return a.sortKey() < b.sortKey(); }
- template <class DataType>
- class QCPDataContainer
- {
- public:
- typedef typename QVector<DataType>::const_iterator const_iterator;
- typedef typename QVector<DataType>::iterator iterator;
- QCPDataContainer();
-
- int size() const { return mData.size()-mPreallocSize; }
- bool isEmpty() const { return size() == 0; }
- bool autoSqueeze() const { return mAutoSqueeze; }
-
- void setAutoSqueeze(bool enabled);
-
- void set(const QCPDataContainer<DataType> &data);
- void set(const QVector<DataType> &data, bool alreadySorted=false);
- void add(const QCPDataContainer<DataType> &data);
- void add(const QVector<DataType> &data, bool alreadySorted=false);
- void add(const DataType &data);
- void removeBefore(double sortKey);
- void removeAfter(double sortKey);
- void remove(double sortKeyFrom, double sortKeyTo);
- void remove(double sortKey);
- void clear();
- void sort();
- void squeeze(bool preAllocation=true, bool postAllocation=true);
- const_iterator constBegin() const { return mData.constBegin()+mPreallocSize; }
- const_iterator constEnd() const { return mData.constEnd(); }
- iterator begin() { return mData.begin()+mPreallocSize; }
- iterator end() { return mData.end(); }
- const_iterator findBegin(double sortKey, bool expandedRange=true) const;
- const_iterator findEnd(double sortKey, bool expandedRange=true) const;
- const_iterator at(int index) const { return constBegin()+qBound(0, index, size()); }
- QCPRange keyRange(bool &foundRange, QCP::SignDomain signDomain=QCP::sdBoth);
- QCPRange valueRange(bool &foundRange, QCP::SignDomain signDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange());
- QCPDataRange dataRange() const { return QCPDataRange(0, size()); }
- void limitIteratorsToDataRange(const_iterator &begin, const_iterator &end, const QCPDataRange &dataRange) const;
- protected:
-
- bool mAutoSqueeze;
-
- QVector<DataType> mData;
- int mPreallocSize;
- int mPreallocIteration;
-
- void preallocateGrow(int minimumPreallocSize);
- void performAutoSqueeze();
- };
- template <class DataType>
- QCPDataContainer<DataType>::QCPDataContainer() :
- mAutoSqueeze(true),
- mPreallocSize(0),
- mPreallocIteration(0)
- {
- }
- template <class DataType>
- void QCPDataContainer<DataType>::setAutoSqueeze(bool enabled)
- {
- if (mAutoSqueeze != enabled)
- {
- mAutoSqueeze = enabled;
- if (mAutoSqueeze)
- performAutoSqueeze();
- }
- }
- template <class DataType>
- void QCPDataContainer<DataType>::set(const QCPDataContainer<DataType> &data)
- {
- clear();
- add(data);
- }
- template <class DataType>
- void QCPDataContainer<DataType>::set(const QVector<DataType> &data, bool alreadySorted)
- {
- mData = data;
- mPreallocSize = 0;
- mPreallocIteration = 0;
- if (!alreadySorted)
- sort();
- }
- template <class DataType>
- void QCPDataContainer<DataType>::add(const QCPDataContainer<DataType> &data)
- {
- if (data.isEmpty())
- return;
- const int n = data.size();
- const int oldSize = size();
- if (oldSize > 0 && !qcpLessThanSortKey<DataType>(*constBegin(), *(data.constEnd()-1)))
- {
- if (mPreallocSize < n)
- preallocateGrow(n);
- mPreallocSize -= n;
- std::copy(data.constBegin(), data.constEnd(), begin());
- } else
- {
- mData.resize(mData.size()+n);
- std::copy(data.constBegin(), data.constEnd(), end()-n);
- if (oldSize > 0 && !qcpLessThanSortKey<DataType>(*(constEnd()-n-1), *(constEnd()-n)))
- std::inplace_merge(begin(), end()-n, end(), qcpLessThanSortKey<DataType>);
- }
- }
- template <class DataType>
- void QCPDataContainer<DataType>::add(const QVector<DataType> &data, bool alreadySorted)
- {
- if (data.isEmpty())
- return;
- if (isEmpty())
- {
- set(data, alreadySorted);
- return;
- }
- const int n = data.size();
- const int oldSize = size();
- if (alreadySorted && oldSize > 0 && !qcpLessThanSortKey<DataType>(*constBegin(), *(data.constEnd()-1)))
- {
- if (mPreallocSize < n)
- preallocateGrow(n);
- mPreallocSize -= n;
- std::copy(data.constBegin(), data.constEnd(), begin());
- } else
- {
- mData.resize(mData.size()+n);
- std::copy(data.constBegin(), data.constEnd(), end()-n);
- if (!alreadySorted)
- std::sort(end()-n, end(), qcpLessThanSortKey<DataType>);
- if (oldSize > 0 && !qcpLessThanSortKey<DataType>(*(constEnd()-n-1), *(constEnd()-n)))
- std::inplace_merge(begin(), end()-n, end(), qcpLessThanSortKey<DataType>);
- }
- }
- template <class DataType>
- void QCPDataContainer<DataType>::add(const DataType &data)
- {
- if (isEmpty() || !qcpLessThanSortKey<DataType>(data, *(constEnd()-1)))
- {
- mData.append(data);
- } else if (qcpLessThanSortKey<DataType>(data, *constBegin()))
- {
- if (mPreallocSize < 1)
- preallocateGrow(1);
- --mPreallocSize;
- *begin() = data;
- } else
- {
- QCPDataContainer<DataType>::iterator insertionPoint = std::lower_bound(begin(), end(), data, qcpLessThanSortKey<DataType>);
- mData.insert(insertionPoint, data);
- }
- }
- template <class DataType>
- void QCPDataContainer<DataType>::removeBefore(double sortKey)
- {
- QCPDataContainer<DataType>::iterator it = begin();
- QCPDataContainer<DataType>::iterator itEnd = std::lower_bound(begin(), end(), DataType::fromSortKey(sortKey), qcpLessThanSortKey<DataType>);
- mPreallocSize += int(itEnd-it);
- if (mAutoSqueeze)
- performAutoSqueeze();
- }
- template <class DataType>
- void QCPDataContainer<DataType>::removeAfter(double sortKey)
- {
- QCPDataContainer<DataType>::iterator it = std::upper_bound(begin(), end(), DataType::fromSortKey(sortKey), qcpLessThanSortKey<DataType>);
- QCPDataContainer<DataType>::iterator itEnd = end();
- mData.erase(it, itEnd);
- if (mAutoSqueeze)
- performAutoSqueeze();
- }
- template <class DataType>
- void QCPDataContainer<DataType>::remove(double sortKeyFrom, double sortKeyTo)
- {
- if (sortKeyFrom >= sortKeyTo || isEmpty())
- return;
- QCPDataContainer<DataType>::iterator it = std::lower_bound(begin(), end(), DataType::fromSortKey(sortKeyFrom), qcpLessThanSortKey<DataType>);
- QCPDataContainer<DataType>::iterator itEnd = std::upper_bound(it, end(), DataType::fromSortKey(sortKeyTo), qcpLessThanSortKey<DataType>);
- mData.erase(it, itEnd);
- if (mAutoSqueeze)
- performAutoSqueeze();
- }
- template <class DataType>
- void QCPDataContainer<DataType>::remove(double sortKey)
- {
- QCPDataContainer::iterator it = std::lower_bound(begin(), end(), DataType::fromSortKey(sortKey), qcpLessThanSortKey<DataType>);
- if (it != end() && it->sortKey() == sortKey)
- {
- if (it == begin())
- ++mPreallocSize;
- else
- mData.erase(it);
- }
- if (mAutoSqueeze)
- performAutoSqueeze();
- }
- template <class DataType>
- void QCPDataContainer<DataType>::clear()
- {
- mData.clear();
- mPreallocIteration = 0;
- mPreallocSize = 0;
- }
- template <class DataType>
- void QCPDataContainer<DataType>::sort()
- {
- std::sort(begin(), end(), qcpLessThanSortKey<DataType>);
- }
- template <class DataType>
- void QCPDataContainer<DataType>::squeeze(bool preAllocation, bool postAllocation)
- {
- if (preAllocation)
- {
- if (mPreallocSize > 0)
- {
- std::copy(begin(), end(), mData.begin());
- mData.resize(size());
- mPreallocSize = 0;
- }
- mPreallocIteration = 0;
- }
- if (postAllocation)
- mData.squeeze();
- }
- template <class DataType>
- typename QCPDataContainer<DataType>::const_iterator QCPDataContainer<DataType>::findBegin(double sortKey, bool expandedRange) const
- {
- if (isEmpty())
- return constEnd();
- QCPDataContainer<DataType>::const_iterator it = std::lower_bound(constBegin(), constEnd(), DataType::fromSortKey(sortKey), qcpLessThanSortKey<DataType>);
- if (expandedRange && it != constBegin())
- --it;
- return it;
- }
- template <class DataType>
- typename QCPDataContainer<DataType>::const_iterator QCPDataContainer<DataType>::findEnd(double sortKey, bool expandedRange) const
- {
- if (isEmpty())
- return constEnd();
- QCPDataContainer<DataType>::const_iterator it = std::upper_bound(constBegin(), constEnd(), DataType::fromSortKey(sortKey), qcpLessThanSortKey<DataType>);
- if (expandedRange && it != constEnd())
- ++it;
- return it;
- }
- template <class DataType>
- QCPRange QCPDataContainer<DataType>::keyRange(bool &foundRange, QCP::SignDomain signDomain)
- {
- if (isEmpty())
- {
- foundRange = false;
- return QCPRange();
- }
- QCPRange range;
- bool haveLower = false;
- bool haveUpper = false;
- double current;
- QCPDataContainer<DataType>::const_iterator it = constBegin();
- QCPDataContainer<DataType>::const_iterator itEnd = constEnd();
- if (signDomain == QCP::sdBoth)
- {
- if (DataType::sortKeyIsMainKey())
- {
- while (it != itEnd)
- {
- if (!qIsNaN(it->mainValue()))
- {
- range.lower = it->mainKey();
- haveLower = true;
- break;
- }
- ++it;
- }
- it = itEnd;
- while (it != constBegin())
- {
- --it;
- if (!qIsNaN(it->mainValue()))
- {
- range.upper = it->mainKey();
- haveUpper = true;
- break;
- }
- }
- } else
- {
- while (it != itEnd)
- {
- if (!qIsNaN(it->mainValue()))
- {
- current = it->mainKey();
- if (current < range.lower || !haveLower)
- {
- range.lower = current;
- haveLower = true;
- }
- if (current > range.upper || !haveUpper)
- {
- range.upper = current;
- haveUpper = true;
- }
- }
- ++it;
- }
- }
- } else if (signDomain == QCP::sdNegative)
- {
- while (it != itEnd)
- {
- if (!qIsNaN(it->mainValue()))
- {
- current = it->mainKey();
- if ((current < range.lower || !haveLower) && current < 0)
- {
- range.lower = current;
- haveLower = true;
- }
- if ((current > range.upper || !haveUpper) && current < 0)
- {
- range.upper = current;
- haveUpper = true;
- }
- }
- ++it;
- }
- } else if (signDomain == QCP::sdPositive)
- {
- while (it != itEnd)
- {
- if (!qIsNaN(it->mainValue()))
- {
- current = it->mainKey();
- if ((current < range.lower || !haveLower) && current > 0)
- {
- range.lower = current;
- haveLower = true;
- }
- if ((current > range.upper || !haveUpper) && current > 0)
- {
- range.upper = current;
- haveUpper = true;
- }
- }
- ++it;
- }
- }
- foundRange = haveLower && haveUpper;
- return range;
- }
- template <class DataType>
- QCPRange QCPDataContainer<DataType>::valueRange(bool &foundRange, QCP::SignDomain signDomain, const QCPRange &inKeyRange)
- {
- if (isEmpty())
- {
- foundRange = false;
- return QCPRange();
- }
- QCPRange range;
- const bool restrictKeyRange = inKeyRange != QCPRange();
- bool haveLower = false;
- bool haveUpper = false;
- QCPRange current;
- QCPDataContainer<DataType>::const_iterator itBegin = constBegin();
- QCPDataContainer<DataType>::const_iterator itEnd = constEnd();
- if (DataType::sortKeyIsMainKey() && restrictKeyRange)
- {
- itBegin = findBegin(inKeyRange.lower, false);
- itEnd = findEnd(inKeyRange.upper, false);
- }
- if (signDomain == QCP::sdBoth)
- {
- for (QCPDataContainer<DataType>::const_iterator it = itBegin; it != itEnd; ++it)
- {
- if (restrictKeyRange && (it->mainKey() < inKeyRange.lower || it->mainKey() > inKeyRange.upper))
- continue;
- current = it->valueRange();
- if ((current.lower < range.lower || !haveLower) && !qIsNaN(current.lower))
- {
- range.lower = current.lower;
- haveLower = true;
- }
- if ((current.upper > range.upper || !haveUpper) && !qIsNaN(current.upper))
- {
- range.upper = current.upper;
- haveUpper = true;
- }
- }
- } else if (signDomain == QCP::sdNegative)
- {
- for (QCPDataContainer<DataType>::const_iterator it = itBegin; it != itEnd; ++it)
- {
- if (restrictKeyRange && (it->mainKey() < inKeyRange.lower || it->mainKey() > inKeyRange.upper))
- continue;
- current = it->valueRange();
- if ((current.lower < range.lower || !haveLower) && current.lower < 0 && !qIsNaN(current.lower))
- {
- range.lower = current.lower;
- haveLower = true;
- }
- if ((current.upper > range.upper || !haveUpper) && current.upper < 0 && !qIsNaN(current.upper))
- {
- range.upper = current.upper;
- haveUpper = true;
- }
- }
- } else if (signDomain == QCP::sdPositive)
- {
- for (QCPDataContainer<DataType>::const_iterator it = itBegin; it != itEnd; ++it)
- {
- if (restrictKeyRange && (it->mainKey() < inKeyRange.lower || it->mainKey() > inKeyRange.upper))
- continue;
- current = it->valueRange();
- if ((current.lower < range.lower || !haveLower) && current.lower > 0 && !qIsNaN(current.lower))
- {
- range.lower = current.lower;
- haveLower = true;
- }
- if ((current.upper > range.upper || !haveUpper) && current.upper > 0 && !qIsNaN(current.upper))
- {
- range.upper = current.upper;
- haveUpper = true;
- }
- }
- }
- foundRange = haveLower && haveUpper;
- return range;
- }
- template <class DataType>
- void QCPDataContainer<DataType>::limitIteratorsToDataRange(const_iterator &begin, const_iterator &end, const QCPDataRange &dataRange) const
- {
- QCPDataRange iteratorRange(int(begin-constBegin()), int(end-constBegin()));
- iteratorRange = iteratorRange.bounded(dataRange.bounded(this->dataRange()));
- begin = constBegin()+iteratorRange.begin();
- end = constBegin()+iteratorRange.end();
- }
- template <class DataType>
- void QCPDataContainer<DataType>::preallocateGrow(int minimumPreallocSize)
- {
- if (minimumPreallocSize <= mPreallocSize)
- return;
- int newPreallocSize = minimumPreallocSize;
- newPreallocSize += (1u<<qBound(4, mPreallocIteration+4, 15)) - 12;
- ++mPreallocIteration;
- int sizeDifference = newPreallocSize-mPreallocSize;
- mData.resize(mData.size()+sizeDifference);
- std::copy_backward(mData.begin()+mPreallocSize, mData.end()-sizeDifference, mData.end());
- mPreallocSize = newPreallocSize;
- }
- template <class DataType>
- void QCPDataContainer<DataType>::performAutoSqueeze()
- {
- const int totalAlloc = mData.capacity();
- const int postAllocSize = totalAlloc-mData.size();
- const int usedSize = size();
- bool shrinkPostAllocation = false;
- bool shrinkPreAllocation = false;
- if (totalAlloc > 650000)
- {
- shrinkPostAllocation = postAllocSize > usedSize*1.5;
- shrinkPreAllocation = mPreallocSize*10 > usedSize;
- } else if (totalAlloc > 1000)
- {
- shrinkPostAllocation = postAllocSize > usedSize*5;
- shrinkPreAllocation = mPreallocSize > usedSize*1.5;
- }
- if (shrinkPreAllocation || shrinkPostAllocation)
- squeeze(shrinkPreAllocation, shrinkPostAllocation);
- }
- class QCP_LIB_DECL QCPSelectionDecorator
- {
- Q_GADGET
- public:
- QCPSelectionDecorator();
- virtual ~QCPSelectionDecorator();
-
- QPen pen() const { return mPen; }
- QBrush brush() const { return mBrush; }
- QCPScatterStyle scatterStyle() const { return mScatterStyle; }
- QCPScatterStyle::ScatterProperties usedScatterProperties() const { return mUsedScatterProperties; }
-
- void setPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setScatterStyle(const QCPScatterStyle &scatterStyle, QCPScatterStyle::ScatterProperties usedProperties=QCPScatterStyle::spPen);
- void setUsedScatterProperties(const QCPScatterStyle::ScatterProperties &properties);
-
- void applyPen(QCPPainter *painter) const;
- void applyBrush(QCPPainter *painter) const;
- QCPScatterStyle getFinalScatterStyle(const QCPScatterStyle &unselectedStyle) const;
-
- virtual void copyFrom(const QCPSelectionDecorator *other);
- virtual void drawDecoration(QCPPainter *painter, QCPDataSelection selection);
- protected:
-
- QPen mPen;
- QBrush mBrush;
- QCPScatterStyle mScatterStyle;
- QCPScatterStyle::ScatterProperties mUsedScatterProperties;
-
- QCPAbstractPlottable *mPlottable;
-
- virtual bool registerWithPlottable(QCPAbstractPlottable *plottable);
- private:
- Q_DISABLE_COPY(QCPSelectionDecorator)
- friend class QCPAbstractPlottable;
- };
- Q_DECLARE_METATYPE(QCPSelectionDecorator*)
- class QCP_LIB_DECL QCPAbstractPlottable : public QCPLayerable
- {
- Q_OBJECT
-
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(bool antialiasedFill READ antialiasedFill WRITE setAntialiasedFill)
- Q_PROPERTY(bool antialiasedScatters READ antialiasedScatters WRITE setAntialiasedScatters)
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
- Q_PROPERTY(QCPAxis* keyAxis READ keyAxis WRITE setKeyAxis)
- Q_PROPERTY(QCPAxis* valueAxis READ valueAxis WRITE setValueAxis)
- Q_PROPERTY(QCP::SelectionType selectable READ selectable WRITE setSelectable NOTIFY selectableChanged)
- Q_PROPERTY(QCPDataSelection selection READ selection WRITE setSelection NOTIFY selectionChanged)
- Q_PROPERTY(QCPSelectionDecorator* selectionDecorator READ selectionDecorator WRITE setSelectionDecorator)
-
- public:
- QCPAbstractPlottable(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPAbstractPlottable() Q_DECL_OVERRIDE;
-
- QString name() const { return mName; }
- bool antialiasedFill() const { return mAntialiasedFill; }
- bool antialiasedScatters() const { return mAntialiasedScatters; }
- QPen pen() const { return mPen; }
- QBrush brush() const { return mBrush; }
- QCPAxis *keyAxis() const { return mKeyAxis.data(); }
- QCPAxis *valueAxis() const { return mValueAxis.data(); }
- QCP::SelectionType selectable() const { return mSelectable; }
- bool selected() const { return !mSelection.isEmpty(); }
- QCPDataSelection selection() const { return mSelection; }
- QCPSelectionDecorator *selectionDecorator() const { return mSelectionDecorator; }
-
- void setName(const QString &name);
- void setAntialiasedFill(bool enabled);
- void setAntialiasedScatters(bool enabled);
- void setPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setKeyAxis(QCPAxis *axis);
- void setValueAxis(QCPAxis *axis);
- Q_SLOT void setSelectable(QCP::SelectionType selectable);
- Q_SLOT void setSelection(QCPDataSelection selection);
- void setSelectionDecorator(QCPSelectionDecorator *decorator);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE = 0;
- virtual QCPPlottableInterface1D *interface1D() { return nullptr; }
- virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const = 0;
- virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const = 0;
-
- void coordsToPixels(double key, double value, double &x, double &y) const;
- const QPointF coordsToPixels(double key, double value) const;
- void pixelsToCoords(double x, double y, double &key, double &value) const;
- void pixelsToCoords(const QPointF &pixelPos, double &key, double &value) const;
- void rescaleAxes(bool onlyEnlarge=false) const;
- void rescaleKeyAxis(bool onlyEnlarge=false) const;
- bool rescaleValueAxis(bool onlyEnlarge=false, bool inKeyRange=false) const;
- bool addToLegend(QCPLegend *legend);
- bool addToLegend();
- bool removeFromLegend(QCPLegend *legend) const;
- bool removeFromLegend() const;
- signals:
- void selectionChanged(bool selected);
- void selectionChanged(const QCPDataSelection &selection);
- void selectableChanged(QCP::SelectionType selectable);
- protected:
-
- QString mName;
- bool mAntialiasedFill, mAntialiasedScatters;
- QPen mPen;
- QBrush mBrush;
- QPointer<QCPAxis> mKeyAxis, mValueAxis;
- QCP::SelectionType mSelectable;
- QCPDataSelection mSelection;
- QCPSelectionDecorator *mSelectionDecorator;
-
- virtual QRectF clipRect() const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE = 0;
- virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
- void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
-
- virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
- virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
-
- virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const = 0;
-
- void applyFillAntialiasingHint(QCPPainter *painter) const;
- void applyScattersAntialiasingHint(QCPPainter *painter) const;
- private:
- Q_DISABLE_COPY(QCPAbstractPlottable)
- friend class QCustomPlot;
- friend class QCPAxis;
- friend class QCPPlottableLegendItem;
- };
- class QCP_LIB_DECL QCPItemAnchor
- {
- Q_GADGET
- public:
- QCPItemAnchor(QCustomPlot *parentPlot, QCPAbstractItem *parentItem, const QString &name, int anchorId=-1);
- virtual ~QCPItemAnchor();
-
- QString name() const { return mName; }
- virtual QPointF pixelPosition() const;
- protected:
-
- QString mName;
-
- QCustomPlot *mParentPlot;
- QCPAbstractItem *mParentItem;
- int mAnchorId;
- QSet<QCPItemPosition*> mChildrenX, mChildrenY;
-
- virtual QCPItemPosition *toQCPItemPosition() { return nullptr; }
-
- void addChildX(QCPItemPosition* pos);
- void removeChildX(QCPItemPosition *pos);
- void addChildY(QCPItemPosition* pos);
- void removeChildY(QCPItemPosition *pos);
- private:
- Q_DISABLE_COPY(QCPItemAnchor)
- friend class QCPItemPosition;
- };
- class QCP_LIB_DECL QCPItemPosition : public QCPItemAnchor
- {
- Q_GADGET
- public:
-
- enum PositionType { ptAbsolute
- ,ptViewportRatio
-
-
- ,ptAxisRectRatio
-
-
- ,ptPlotCoords
- };
- Q_ENUMS(PositionType)
- QCPItemPosition(QCustomPlot *parentPlot, QCPAbstractItem *parentItem, const QString &name);
- virtual ~QCPItemPosition() Q_DECL_OVERRIDE;
-
- PositionType type() const { return typeX(); }
- PositionType typeX() const { return mPositionTypeX; }
- PositionType typeY() const { return mPositionTypeY; }
- QCPItemAnchor *parentAnchor() const { return parentAnchorX(); }
- QCPItemAnchor *parentAnchorX() const { return mParentAnchorX; }
- QCPItemAnchor *parentAnchorY() const { return mParentAnchorY; }
- double key() const { return mKey; }
- double value() const { return mValue; }
- QPointF coords() const { return QPointF(mKey, mValue); }
- QCPAxis *keyAxis() const { return mKeyAxis.data(); }
- QCPAxis *valueAxis() const { return mValueAxis.data(); }
- QCPAxisRect *axisRect() const;
- virtual QPointF pixelPosition() const Q_DECL_OVERRIDE;
-
- void setType(PositionType type);
- void setTypeX(PositionType type);
- void setTypeY(PositionType type);
- bool setParentAnchor(QCPItemAnchor *parentAnchor, bool keepPixelPosition=false);
- bool setParentAnchorX(QCPItemAnchor *parentAnchor, bool keepPixelPosition=false);
- bool setParentAnchorY(QCPItemAnchor *parentAnchor, bool keepPixelPosition=false);
- void setCoords(double key, double value);
- void setCoords(const QPointF &pos);
- void setAxes(QCPAxis* keyAxis, QCPAxis* valueAxis);
- void setAxisRect(QCPAxisRect *axisRect);
- void setPixelPosition(const QPointF &pixelPosition);
- protected:
-
- PositionType mPositionTypeX, mPositionTypeY;
- QPointer<QCPAxis> mKeyAxis, mValueAxis;
- QPointer<QCPAxisRect> mAxisRect;
- double mKey, mValue;
- QCPItemAnchor *mParentAnchorX, *mParentAnchorY;
-
- virtual QCPItemPosition *toQCPItemPosition() Q_DECL_OVERRIDE { return this; }
- private:
- Q_DISABLE_COPY(QCPItemPosition)
- };
- Q_DECLARE_METATYPE(QCPItemPosition::PositionType)
- class QCP_LIB_DECL QCPAbstractItem : public QCPLayerable
- {
- Q_OBJECT
-
- Q_PROPERTY(bool clipToAxisRect READ clipToAxisRect WRITE setClipToAxisRect)
- Q_PROPERTY(QCPAxisRect* clipAxisRect READ clipAxisRect WRITE setClipAxisRect)
- Q_PROPERTY(bool selectable READ selectable WRITE setSelectable NOTIFY selectableChanged)
- Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectionChanged)
-
- public:
- explicit QCPAbstractItem(QCustomPlot *parentPlot);
- virtual ~QCPAbstractItem() Q_DECL_OVERRIDE;
-
- bool clipToAxisRect() const { return mClipToAxisRect; }
- QCPAxisRect *clipAxisRect() const;
- bool selectable() const { return mSelectable; }
- bool selected() const { return mSelected; }
-
- void setClipToAxisRect(bool clip);
- void setClipAxisRect(QCPAxisRect *rect);
- Q_SLOT void setSelectable(bool selectable);
- Q_SLOT void setSelected(bool selected);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE = 0;
-
- QList<QCPItemPosition*> positions() const { return mPositions; }
- QList<QCPItemAnchor*> anchors() const { return mAnchors; }
- QCPItemPosition *position(const QString &name) const;
- QCPItemAnchor *anchor(const QString &name) const;
- bool hasAnchor(const QString &name) const;
- signals:
- void selectionChanged(bool selected);
- void selectableChanged(bool selectable);
- protected:
-
- bool mClipToAxisRect;
- QPointer<QCPAxisRect> mClipAxisRect;
- QList<QCPItemPosition*> mPositions;
- QList<QCPItemAnchor*> mAnchors;
- bool mSelectable, mSelected;
-
- virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
- virtual QRectF clipRect() const Q_DECL_OVERRIDE;
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE = 0;
-
- virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
- virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
-
- virtual QPointF anchorPixelPosition(int anchorId) const;
-
- double rectDistance(const QRectF &rect, const QPointF &pos, bool filledRect) const;
- QCPItemPosition *createPosition(const QString &name);
- QCPItemAnchor *createAnchor(const QString &name, int anchorId);
- private:
- Q_DISABLE_COPY(QCPAbstractItem)
- friend class QCustomPlot;
- friend class QCPItemAnchor;
- };
- class QCP_LIB_DECL QCustomPlot : public QWidget
- {
- Q_OBJECT
-
- Q_PROPERTY(QRect viewport READ viewport WRITE setViewport)
- Q_PROPERTY(QPixmap background READ background WRITE setBackground)
- Q_PROPERTY(bool backgroundScaled READ backgroundScaled WRITE setBackgroundScaled)
- Q_PROPERTY(Qt::AspectRatioMode backgroundScaledMode READ backgroundScaledMode WRITE setBackgroundScaledMode)
- Q_PROPERTY(QCPLayoutGrid* plotLayout READ plotLayout)
- Q_PROPERTY(bool autoAddPlottableToLegend READ autoAddPlottableToLegend WRITE setAutoAddPlottableToLegend)
- Q_PROPERTY(int selectionTolerance READ selectionTolerance WRITE setSelectionTolerance)
- Q_PROPERTY(bool noAntialiasingOnDrag READ noAntialiasingOnDrag WRITE setNoAntialiasingOnDrag)
- Q_PROPERTY(Qt::KeyboardModifier multiSelectModifier READ multiSelectModifier WRITE setMultiSelectModifier)
- Q_PROPERTY(bool openGl READ openGl WRITE setOpenGl)
-
- public:
-
- enum LayerInsertMode { limBelow
- ,limAbove
- };
- Q_ENUMS(LayerInsertMode)
-
- enum RefreshPriority { rpImmediateRefresh
- ,rpQueuedRefresh
- ,rpRefreshHint
- ,rpQueuedReplot
- };
- Q_ENUMS(RefreshPriority)
- explicit QCustomPlot(QWidget *parent = nullptr);
- virtual ~QCustomPlot() Q_DECL_OVERRIDE;
-
- QRect viewport() const { return mViewport; }
- double bufferDevicePixelRatio() const { return mBufferDevicePixelRatio; }
- QPixmap background() const { return mBackgroundPixmap; }
- bool backgroundScaled() const { return mBackgroundScaled; }
- Qt::AspectRatioMode backgroundScaledMode() const { return mBackgroundScaledMode; }
- QCPLayoutGrid *plotLayout() const { return mPlotLayout; }
- QCP::AntialiasedElements antialiasedElements() const { return mAntialiasedElements; }
- QCP::AntialiasedElements notAntialiasedElements() const { return mNotAntialiasedElements; }
- bool autoAddPlottableToLegend() const { return mAutoAddPlottableToLegend; }
- const QCP::Interactions interactions() const { return mInteractions; }
- int selectionTolerance() const { return mSelectionTolerance; }
- bool noAntialiasingOnDrag() const { return mNoAntialiasingOnDrag; }
- QCP::PlottingHints plottingHints() const { return mPlottingHints; }
- Qt::KeyboardModifier multiSelectModifier() const { return mMultiSelectModifier; }
- QCP::SelectionRectMode selectionRectMode() const { return mSelectionRectMode; }
- QCPSelectionRect *selectionRect() const { return mSelectionRect; }
- bool openGl() const { return mOpenGl; }
-
- void setViewport(const QRect &rect);
- void setBufferDevicePixelRatio(double ratio);
- void setBackground(const QPixmap &pm);
- void setBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode=Qt::KeepAspectRatioByExpanding);
- void setBackground(const QBrush &brush);
- void setBackgroundScaled(bool scaled);
- void setBackgroundScaledMode(Qt::AspectRatioMode mode);
- void setAntialiasedElements(const QCP::AntialiasedElements &antialiasedElements);
- void setAntialiasedElement(QCP::AntialiasedElement antialiasedElement, bool enabled=true);
- void setNotAntialiasedElements(const QCP::AntialiasedElements ¬AntialiasedElements);
- void setNotAntialiasedElement(QCP::AntialiasedElement notAntialiasedElement, bool enabled=true);
- void setAutoAddPlottableToLegend(bool on);
- void setInteractions(const QCP::Interactions &interactions);
- void setInteraction(const QCP::Interaction &interaction, bool enabled=true);
- void setSelectionTolerance(int pixels);
- void setNoAntialiasingOnDrag(bool enabled);
- void setPlottingHints(const QCP::PlottingHints &hints);
- void setPlottingHint(QCP::PlottingHint hint, bool enabled=true);
- void setMultiSelectModifier(Qt::KeyboardModifier modifier);
- void setSelectionRectMode(QCP::SelectionRectMode mode);
- void setSelectionRect(QCPSelectionRect *selectionRect);
- void setOpenGl(bool enabled, int multisampling=16);
-
-
- QCPAbstractPlottable *plottable(int index);
- QCPAbstractPlottable *plottable();
- bool removePlottable(QCPAbstractPlottable *plottable);
- bool removePlottable(int index);
- int clearPlottables();
- int plottableCount() const;
- QList<QCPAbstractPlottable*> selectedPlottables() const;
- template<class PlottableType>
- PlottableType *plottableAt(const QPointF &pos, bool onlySelectable=false, int *dataIndex=nullptr) const;
- QCPAbstractPlottable *plottableAt(const QPointF &pos, bool onlySelectable=false, int *dataIndex=nullptr) const;
- bool hasPlottable(QCPAbstractPlottable *plottable) const;
-
- QCPGraph *graph(int index) const;
- QCPGraph *graph() const;
- QCPGraph *addGraph(QCPAxis *keyAxis=nullptr, QCPAxis *valueAxis=nullptr);
- bool removeGraph(QCPGraph *graph);
- bool removeGraph(int index);
- int clearGraphs();
- int graphCount() const;
- QList<QCPGraph*> selectedGraphs() const;
-
- QCPAbstractItem *item(int index) const;
- QCPAbstractItem *item() const;
- bool removeItem(QCPAbstractItem *item);
- bool removeItem(int index);
- int clearItems();
- int itemCount() const;
- QList<QCPAbstractItem*> selectedItems() const;
- template<class ItemType>
- ItemType *itemAt(const QPointF &pos, bool onlySelectable=false) const;
- QCPAbstractItem *itemAt(const QPointF &pos, bool onlySelectable=false) const;
- bool hasItem(QCPAbstractItem *item) const;
-
- QCPLayer *layer(const QString &name) const;
- QCPLayer *layer(int index) const;
- QCPLayer *currentLayer() const;
- bool setCurrentLayer(const QString &name);
- bool setCurrentLayer(QCPLayer *layer);
- int layerCount() const;
- bool addLayer(const QString &name, QCPLayer *otherLayer=nullptr, LayerInsertMode insertMode=limAbove);
- bool removeLayer(QCPLayer *layer);
- bool moveLayer(QCPLayer *layer, QCPLayer *otherLayer, LayerInsertMode insertMode=limAbove);
-
- int axisRectCount() const;
- QCPAxisRect* axisRect(int index=0) const;
- QList<QCPAxisRect*> axisRects() const;
- QCPLayoutElement* layoutElementAt(const QPointF &pos) const;
- QCPAxisRect* axisRectAt(const QPointF &pos) const;
- Q_SLOT void rescaleAxes(bool onlyVisiblePlottables=false);
- QList<QCPAxis*> selectedAxes() const;
- QList<QCPLegend*> selectedLegends() const;
- Q_SLOT void deselectAll();
- bool savePdf(const QString &fileName, int width=0, int height=0, QCP::ExportPen exportPen=QCP::epAllowCosmetic, const QString &pdfCreator=QString(), const QString &pdfTitle=QString());
- bool savePng(const QString &fileName, int width=0, int height=0, double scale=1.0, int quality=-1, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch);
- bool saveJpg(const QString &fileName, int width=0, int height=0, double scale=1.0, int quality=-1, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch);
- bool saveBmp(const QString &fileName, int width=0, int height=0, double scale=1.0, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch);
- bool saveRastered(const QString &fileName, int width, int height, double scale, const char *format, int quality=-1, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch);
- QPixmap toPixmap(int width=0, int height=0, double scale=1.0);
- void toPainter(QCPPainter *painter, int width=0, int height=0);
- Q_SLOT void replot(QCustomPlot::RefreshPriority refreshPriority=QCustomPlot::rpRefreshHint);
- double replotTime(bool average=false) const;
- QCPAxis *xAxis, *yAxis, *xAxis2, *yAxis2;
- QCPLegend *legend;
- signals:
- void mouseDoubleClick(QMouseEvent *event);
- void mousePress(QMouseEvent *event);
- void mouseMove(QMouseEvent *event);
- void mouseRelease(QMouseEvent *event);
- void mouseClick(QMouseEvent *event);
- void mouseWheel(QWheelEvent *event);
- void plottableClick(QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event);
- void plottableDoubleClick(QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event);
- void itemClick(QCPAbstractItem *item, QMouseEvent *event);
- void itemDoubleClick(QCPAbstractItem *item, QMouseEvent *event);
- void axisClick(QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event);
- void axisDoubleClick(QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event);
- void legendClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event);
- void legendDoubleClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event);
- void selectionChangedByUser();
- void beforeReplot();
- void afterLayout();
- void afterReplot();
- protected:
-
- QRect mViewport;
- double mBufferDevicePixelRatio;
- QCPLayoutGrid *mPlotLayout;
- bool mAutoAddPlottableToLegend;
- QList<QCPAbstractPlottable*> mPlottables;
- QList<QCPGraph*> mGraphs;
- QList<QCPAbstractItem*> mItems;
- QList<QCPLayer*> mLayers;
- QCP::AntialiasedElements mAntialiasedElements, mNotAntialiasedElements;
- QCP::Interactions mInteractions;
- int mSelectionTolerance;
- bool mNoAntialiasingOnDrag;
- QBrush mBackgroundBrush;
- QPixmap mBackgroundPixmap;
- QPixmap mScaledBackgroundPixmap;
- bool mBackgroundScaled;
- Qt::AspectRatioMode mBackgroundScaledMode;
- QCPLayer *mCurrentLayer;
- QCP::PlottingHints mPlottingHints;
- Qt::KeyboardModifier mMultiSelectModifier;
- QCP::SelectionRectMode mSelectionRectMode;
- QCPSelectionRect *mSelectionRect;
- bool mOpenGl;
-
- QList<QSharedPointer<QCPAbstractPaintBuffer> > mPaintBuffers;
- QPoint mMousePressPos;
- bool mMouseHasMoved;
- QPointer<QCPLayerable> mMouseEventLayerable;
- QPointer<QCPLayerable> mMouseSignalLayerable;
- QVariant mMouseEventLayerableDetails;
- QVariant mMouseSignalLayerableDetails;
- bool mReplotting;
- bool mReplotQueued;
- double mReplotTime, mReplotTimeAverage;
- int mOpenGlMultisamples;
- QCP::AntialiasedElements mOpenGlAntialiasedElementsBackup;
- bool mOpenGlCacheLabelsBackup;
- #ifdef QCP_OPENGL_FBO
- QSharedPointer<QOpenGLContext> mGlContext;
- QSharedPointer<QSurface> mGlSurface;
- QSharedPointer<QOpenGLPaintDevice> mGlPaintDevice;
- #endif
-
- virtual QSize minimumSizeHint() const Q_DECL_OVERRIDE;
- virtual QSize sizeHint() const Q_DECL_OVERRIDE;
- virtual void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
- virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
- virtual void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- virtual void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
-
- virtual void draw(QCPPainter *painter);
- virtual void updateLayout();
- virtual void axisRemoved(QCPAxis *axis);
- virtual void legendRemoved(QCPLegend *legend);
- Q_SLOT virtual void processRectSelection(QRect rect, QMouseEvent *event);
- Q_SLOT virtual void processRectZoom(QRect rect, QMouseEvent *event);
- Q_SLOT virtual void processPointSelection(QMouseEvent *event);
-
- bool registerPlottable(QCPAbstractPlottable *plottable);
- bool registerGraph(QCPGraph *graph);
- bool registerItem(QCPAbstractItem* item);
- void updateLayerIndices() const;
- QCPLayerable *layerableAt(const QPointF &pos, bool onlySelectable, QVariant *selectionDetails=nullptr) const;
- QList<QCPLayerable*> layerableListAt(const QPointF &pos, bool onlySelectable, QList<QVariant> *selectionDetails=nullptr) const;
- void drawBackground(QCPPainter *painter);
- void setupPaintBuffers();
- QCPAbstractPaintBuffer *createPaintBuffer();
- bool hasInvalidatedPaintBuffers();
- bool setupOpenGl();
- void freeOpenGl();
- friend class QCPLegend;
- friend class QCPAxis;
- friend class QCPLayer;
- friend class QCPAxisRect;
- friend class QCPAbstractPlottable;
- friend class QCPGraph;
- friend class QCPAbstractItem;
- };
- Q_DECLARE_METATYPE(QCustomPlot::LayerInsertMode)
- Q_DECLARE_METATYPE(QCustomPlot::RefreshPriority)
- template<class PlottableType>
- PlottableType *QCustomPlot::plottableAt(const QPointF &pos, bool onlySelectable, int *dataIndex) const
- {
- PlottableType *resultPlottable = 0;
- QVariant resultDetails;
- double resultDistance = mSelectionTolerance;
- foreach (QCPAbstractPlottable *plottable, mPlottables)
- {
- PlottableType *currentPlottable = qobject_cast<PlottableType*>(plottable);
- if (!currentPlottable || (onlySelectable && !currentPlottable->selectable()))
- continue;
- if (currentPlottable->clipRect().contains(pos.toPoint()))
- {
- QVariant details;
- double currentDistance = currentPlottable->selectTest(pos, false, dataIndex ? &details : nullptr);
- if (currentDistance >= 0 && currentDistance < resultDistance)
- {
- resultPlottable = currentPlottable;
- resultDetails = details;
- resultDistance = currentDistance;
- }
- }
- }
- if (resultPlottable && dataIndex)
- {
- QCPDataSelection sel = resultDetails.value<QCPDataSelection>();
- if (!sel.isEmpty())
- *dataIndex = sel.dataRange(0).begin();
- }
- return resultPlottable;
- }
- template<class ItemType>
- ItemType *QCustomPlot::itemAt(const QPointF &pos, bool onlySelectable) const
- {
- ItemType *resultItem = 0;
- double resultDistance = mSelectionTolerance;
- foreach (QCPAbstractItem *item, mItems)
- {
- ItemType *currentItem = qobject_cast<ItemType*>(item);
- if (!currentItem || (onlySelectable && !currentItem->selectable()))
- continue;
- if (!currentItem->clipToAxisRect() || currentItem->clipRect().contains(pos.toPoint()))
- {
- double currentDistance = currentItem->selectTest(pos, false);
- if (currentDistance >= 0 && currentDistance < resultDistance)
- {
- resultItem = currentItem;
- resultDistance = currentDistance;
- }
- }
- }
- return resultItem;
- }
- class QCPPlottableInterface1D
- {
- public:
- virtual ~QCPPlottableInterface1D() = default;
-
- virtual int dataCount() const = 0;
- virtual double dataMainKey(int index) const = 0;
- virtual double dataSortKey(int index) const = 0;
- virtual double dataMainValue(int index) const = 0;
- virtual QCPRange dataValueRange(int index) const = 0;
- virtual QPointF dataPixelPosition(int index) const = 0;
- virtual bool sortKeyIsMainKey() const = 0;
- virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const = 0;
- virtual int findBegin(double sortKey, bool expandedRange=true) const = 0;
- virtual int findEnd(double sortKey, bool expandedRange=true) const = 0;
- };
- template <class DataType>
- class QCPAbstractPlottable1D : public QCPAbstractPlottable, public QCPPlottableInterface1D
- {
-
- public:
- QCPAbstractPlottable1D(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPAbstractPlottable1D() Q_DECL_OVERRIDE;
-
- virtual int dataCount() const Q_DECL_OVERRIDE;
- virtual double dataMainKey(int index) const Q_DECL_OVERRIDE;
- virtual double dataSortKey(int index) const Q_DECL_OVERRIDE;
- virtual double dataMainValue(int index) const Q_DECL_OVERRIDE;
- virtual QCPRange dataValueRange(int index) const Q_DECL_OVERRIDE;
- virtual QPointF dataPixelPosition(int index) const Q_DECL_OVERRIDE;
- virtual bool sortKeyIsMainKey() const Q_DECL_OVERRIDE;
- virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const Q_DECL_OVERRIDE;
- virtual int findBegin(double sortKey, bool expandedRange=true) const Q_DECL_OVERRIDE;
- virtual int findEnd(double sortKey, bool expandedRange=true) const Q_DECL_OVERRIDE;
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- virtual QCPPlottableInterface1D *interface1D() Q_DECL_OVERRIDE { return this; }
- protected:
-
- QSharedPointer<QCPDataContainer<DataType> > mDataContainer;
-
- void getDataSegments(QList<QCPDataRange> &selectedSegments, QList<QCPDataRange> &unselectedSegments) const;
- void drawPolyline(QCPPainter *painter, const QVector<QPointF> &lineData) const;
- private:
- Q_DISABLE_COPY(QCPAbstractPlottable1D)
- };
- template <class DataType>
- QCPAbstractPlottable1D<DataType>::QCPAbstractPlottable1D(QCPAxis *keyAxis, QCPAxis *valueAxis) :
- QCPAbstractPlottable(keyAxis, valueAxis),
- mDataContainer(new QCPDataContainer<DataType>)
- {
- }
- template <class DataType>
- QCPAbstractPlottable1D<DataType>::~QCPAbstractPlottable1D()
- {
- }
- template <class DataType>
- int QCPAbstractPlottable1D<DataType>::dataCount() const
- {
- return mDataContainer->size();
- }
- template <class DataType>
- double QCPAbstractPlottable1D<DataType>::dataMainKey(int index) const
- {
- if (index >= 0 && index < mDataContainer->size())
- {
- return (mDataContainer->constBegin()+index)->mainKey();
- } else
- {
- return 0;
- }
- }
- template <class DataType>
- double QCPAbstractPlottable1D<DataType>::dataSortKey(int index) const
- {
- if (index >= 0 && index < mDataContainer->size())
- {
- return (mDataContainer->constBegin()+index)->sortKey();
- } else
- {
- return 0;
- }
- }
- template <class DataType>
- double QCPAbstractPlottable1D<DataType>::dataMainValue(int index) const
- {
- if (index >= 0 && index < mDataContainer->size())
- {
- return (mDataContainer->constBegin()+index)->mainValue();
- } else
- {
- return 0;
- }
- }
- template <class DataType>
- QCPRange QCPAbstractPlottable1D<DataType>::dataValueRange(int index) const
- {
- if (index >= 0 && index < mDataContainer->size())
- {
- return (mDataContainer->constBegin()+index)->valueRange();
- } else
- {
- return QCPRange(0, 0);
- }
- }
- template <class DataType>
- QPointF QCPAbstractPlottable1D<DataType>::dataPixelPosition(int index) const
- {
- if (index >= 0 && index < mDataContainer->size())
- {
- const typename QCPDataContainer<DataType>::const_iterator it = mDataContainer->constBegin()+index;
- return coordsToPixels(it->mainKey(), it->mainValue());
- } else
- {
- return QPointF();
- }
- }
- template <class DataType>
- bool QCPAbstractPlottable1D<DataType>::sortKeyIsMainKey() const
- {
- return DataType::sortKeyIsMainKey();
- }
- template <class DataType>
- QCPDataSelection QCPAbstractPlottable1D<DataType>::selectTestRect(const QRectF &rect, bool onlySelectable) const
- {
- QCPDataSelection result;
- if ((onlySelectable && mSelectable == QCP::stNone) || mDataContainer->isEmpty())
- return result;
- if (!mKeyAxis || !mValueAxis)
- return result;
-
- double key1, value1, key2, value2;
- pixelsToCoords(rect.topLeft(), key1, value1);
- pixelsToCoords(rect.bottomRight(), key2, value2);
- QCPRange keyRange(key1, key2);
- QCPRange valueRange(value1, value2);
- typename QCPDataContainer<DataType>::const_iterator begin = mDataContainer->constBegin();
- typename QCPDataContainer<DataType>::const_iterator end = mDataContainer->constEnd();
- if (DataType::sortKeyIsMainKey())
- {
- begin = mDataContainer->findBegin(keyRange.lower, false);
- end = mDataContainer->findEnd(keyRange.upper, false);
- }
- if (begin == end)
- return result;
- int currentSegmentBegin = -1;
- for (typename QCPDataContainer<DataType>::const_iterator it=begin; it!=end; ++it)
- {
- if (currentSegmentBegin == -1)
- {
- if (valueRange.contains(it->mainValue()) && keyRange.contains(it->mainKey()))
- currentSegmentBegin = int(it-mDataContainer->constBegin());
- } else if (!valueRange.contains(it->mainValue()) || !keyRange.contains(it->mainKey()))
- {
- result.addDataRange(QCPDataRange(currentSegmentBegin, int(it-mDataContainer->constBegin())), false);
- currentSegmentBegin = -1;
- }
- }
-
- if (currentSegmentBegin != -1)
- result.addDataRange(QCPDataRange(currentSegmentBegin, int(end-mDataContainer->constBegin())), false);
- result.simplify();
- return result;
- }
- template <class DataType>
- int QCPAbstractPlottable1D<DataType>::findBegin(double sortKey, bool expandedRange) const
- {
- return int(mDataContainer->findBegin(sortKey, expandedRange)-mDataContainer->constBegin());
- }
- template <class DataType>
- int QCPAbstractPlottable1D<DataType>::findEnd(double sortKey, bool expandedRange) const
- {
- return int(mDataContainer->findEnd(sortKey, expandedRange)-mDataContainer->constBegin());
- }
- template <class DataType>
- double QCPAbstractPlottable1D<DataType>::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const
- {
- if ((onlySelectable && mSelectable == QCP::stNone) || mDataContainer->isEmpty())
- return -1;
- if (!mKeyAxis || !mValueAxis)
- return -1;
- QCPDataSelection selectionResult;
- double minDistSqr = (std::numeric_limits<double>::max)();
- int minDistIndex = mDataContainer->size();
- typename QCPDataContainer<DataType>::const_iterator begin = mDataContainer->constBegin();
- typename QCPDataContainer<DataType>::const_iterator end = mDataContainer->constEnd();
- if (DataType::sortKeyIsMainKey())
- {
-
- double posKeyMin, posKeyMax, dummy;
- pixelsToCoords(pos-QPointF(mParentPlot->selectionTolerance(), mParentPlot->selectionTolerance()), posKeyMin, dummy);
- pixelsToCoords(pos+QPointF(mParentPlot->selectionTolerance(), mParentPlot->selectionTolerance()), posKeyMax, dummy);
- if (posKeyMin > posKeyMax)
- qSwap(posKeyMin, posKeyMax);
- begin = mDataContainer->findBegin(posKeyMin, true);
- end = mDataContainer->findEnd(posKeyMax, true);
- }
- if (begin == end)
- return -1;
- QCPRange keyRange(mKeyAxis->range());
- QCPRange valueRange(mValueAxis->range());
- for (typename QCPDataContainer<DataType>::const_iterator it=begin; it!=end; ++it)
- {
- const double mainKey = it->mainKey();
- const double mainValue = it->mainValue();
- if (keyRange.contains(mainKey) && valueRange.contains(mainValue))
- {
- const double currentDistSqr = QCPVector2D(coordsToPixels(mainKey, mainValue)-pos).lengthSquared();
- if (currentDistSqr < minDistSqr)
- {
- minDistSqr = currentDistSqr;
- minDistIndex = int(it-mDataContainer->constBegin());
- }
- }
- }
- if (minDistIndex != mDataContainer->size())
- selectionResult.addDataRange(QCPDataRange(minDistIndex, minDistIndex+1), false);
- selectionResult.simplify();
- if (details)
- details->setValue(selectionResult);
- return qSqrt(minDistSqr);
- }
- template <class DataType>
- void QCPAbstractPlottable1D<DataType>::getDataSegments(QList<QCPDataRange> &selectedSegments, QList<QCPDataRange> &unselectedSegments) const
- {
- selectedSegments.clear();
- unselectedSegments.clear();
- if (mSelectable == QCP::stWhole)
- {
- if (selected())
- selectedSegments << QCPDataRange(0, dataCount());
- else
- unselectedSegments << QCPDataRange(0, dataCount());
- } else
- {
- QCPDataSelection sel(selection());
- sel.simplify();
- selectedSegments = sel.dataRanges();
- unselectedSegments = sel.inverse(QCPDataRange(0, dataCount())).dataRanges();
- }
- }
- template <class DataType>
- void QCPAbstractPlottable1D<DataType>::drawPolyline(QCPPainter *painter, const QVector<QPointF> &lineData) const
- {
-
-
-
-
- if (!painter->modes().testFlag(QCPPainter::pmVectorized) &&
- qFuzzyCompare(painter->pen().widthF(), 1.0))
- {
- QPen newPen = painter->pen();
- newPen.setWidth(0);
- painter->setPen(newPen);
- }
-
- if (mParentPlot->plottingHints().testFlag(QCP::phFastPolylines) &&
- painter->pen().style() == Qt::SolidLine &&
- !painter->modes().testFlag(QCPPainter::pmVectorized) &&
- !painter->modes().testFlag(QCPPainter::pmNoCaching))
- {
- int i = 0;
- bool lastIsNan = false;
- const int lineDataSize = lineData.size();
- while (i < lineDataSize && (qIsNaN(lineData.at(i).y()) || qIsNaN(lineData.at(i).x())))
- ++i;
- ++i;
- while (i < lineDataSize)
- {
- if (!qIsNaN(lineData.at(i).y()) && !qIsNaN(lineData.at(i).x()))
- {
- if (!lastIsNan)
- painter->drawLine(lineData.at(i-1), lineData.at(i));
- else
- lastIsNan = false;
- } else
- lastIsNan = true;
- ++i;
- }
- } else
- {
- int segmentStart = 0;
- int i = 0;
- const int lineDataSize = lineData.size();
- while (i < lineDataSize)
- {
- if (qIsNaN(lineData.at(i).y()) || qIsNaN(lineData.at(i).x()) || qIsInf(lineData.at(i).y()))
- {
- painter->drawPolyline(lineData.constData()+segmentStart, i-segmentStart);
- segmentStart = i+1;
- }
- ++i;
- }
-
- painter->drawPolyline(lineData.constData()+segmentStart, lineDataSize-segmentStart);
- }
- }
- class QCP_LIB_DECL QCPColorGradient
- {
- Q_GADGET
- public:
-
- enum ColorInterpolation { ciRGB
- ,ciHSV
- };
- Q_ENUMS(ColorInterpolation)
-
- enum NanHandling { nhNone
- ,nhLowestColor
- ,nhHighestColor
- ,nhTransparent
- ,nhNanColor
- };
- Q_ENUMS(NanHandling)
-
- enum GradientPreset { gpGrayscale
- ,gpHot
- ,gpCold
- ,gpNight
- ,gpCandy
- ,gpGeography
- ,gpIon
- ,gpThermal
- ,gpPolar
- ,gpSpectrum
- ,gpJet
- ,gpHues
- };
- Q_ENUMS(GradientPreset)
- QCPColorGradient();
- QCPColorGradient(GradientPreset preset);
- bool operator==(const QCPColorGradient &other) const;
- bool operator!=(const QCPColorGradient &other) const { return !(*this == other); }
-
- int levelCount() const { return mLevelCount; }
- QMap<double, QColor> colorStops() const { return mColorStops; }
- ColorInterpolation colorInterpolation() const { return mColorInterpolation; }
- NanHandling nanHandling() const { return mNanHandling; }
- QColor nanColor() const { return mNanColor; }
- bool periodic() const { return mPeriodic; }
-
- void setLevelCount(int n);
- void setColorStops(const QMap<double, QColor> &colorStops);
- void setColorStopAt(double position, const QColor &color);
- void setColorInterpolation(ColorInterpolation interpolation);
- void setNanHandling(NanHandling handling);
- void setNanColor(const QColor &color);
- void setPeriodic(bool enabled);
-
- void colorize(const double *data, const QCPRange &range, QRgb *scanLine, int n, int dataIndexFactor=1, bool logarithmic=false);
- void colorize(const double *data, const unsigned char *alpha, const QCPRange &range, QRgb *scanLine, int n, int dataIndexFactor=1, bool logarithmic=false);
- QRgb color(double position, const QCPRange &range, bool logarithmic=false);
- void loadPreset(GradientPreset preset);
- void clearColorStops();
- QCPColorGradient inverted() const;
- protected:
-
- int mLevelCount;
- QMap<double, QColor> mColorStops;
- ColorInterpolation mColorInterpolation;
- NanHandling mNanHandling;
- QColor mNanColor;
- bool mPeriodic;
-
- QVector<QRgb> mColorBuffer;
- bool mColorBufferInvalidated;
-
- bool stopsUseAlpha() const;
- void updateColorBuffer();
- };
- Q_DECLARE_METATYPE(QCPColorGradient::ColorInterpolation)
- Q_DECLARE_METATYPE(QCPColorGradient::NanHandling)
- Q_DECLARE_METATYPE(QCPColorGradient::GradientPreset)
- class QCP_LIB_DECL QCPSelectionDecoratorBracket : public QCPSelectionDecorator
- {
- Q_GADGET
- public:
-
- enum BracketStyle { bsSquareBracket
- ,bsHalfEllipse
- ,bsEllipse
- ,bsPlus
- ,bsUserStyle
- };
- Q_ENUMS(BracketStyle)
- QCPSelectionDecoratorBracket();
- virtual ~QCPSelectionDecoratorBracket() Q_DECL_OVERRIDE;
-
- QPen bracketPen() const { return mBracketPen; }
- QBrush bracketBrush() const { return mBracketBrush; }
- int bracketWidth() const { return mBracketWidth; }
- int bracketHeight() const { return mBracketHeight; }
- BracketStyle bracketStyle() const { return mBracketStyle; }
- bool tangentToData() const { return mTangentToData; }
- int tangentAverage() const { return mTangentAverage; }
-
- void setBracketPen(const QPen &pen);
- void setBracketBrush(const QBrush &brush);
- void setBracketWidth(int width);
- void setBracketHeight(int height);
- void setBracketStyle(BracketStyle style);
- void setTangentToData(bool enabled);
- void setTangentAverage(int pointCount);
-
- virtual void drawBracket(QCPPainter *painter, int direction) const;
-
- virtual void drawDecoration(QCPPainter *painter, QCPDataSelection selection) Q_DECL_OVERRIDE;
- protected:
-
- QPen mBracketPen;
- QBrush mBracketBrush;
- int mBracketWidth;
- int mBracketHeight;
- BracketStyle mBracketStyle;
- bool mTangentToData;
- int mTangentAverage;
-
- double getTangentAngle(const QCPPlottableInterface1D *interface1d, int dataIndex, int direction) const;
- QPointF getPixelCoordinates(const QCPPlottableInterface1D *interface1d, int dataIndex) const;
- };
- Q_DECLARE_METATYPE(QCPSelectionDecoratorBracket::BracketStyle)
- class QCP_LIB_DECL QCPAxisRect : public QCPLayoutElement
- {
- Q_OBJECT
-
- Q_PROPERTY(QPixmap background READ background WRITE setBackground)
- Q_PROPERTY(bool backgroundScaled READ backgroundScaled WRITE setBackgroundScaled)
- Q_PROPERTY(Qt::AspectRatioMode backgroundScaledMode READ backgroundScaledMode WRITE setBackgroundScaledMode)
- Q_PROPERTY(Qt::Orientations rangeDrag READ rangeDrag WRITE setRangeDrag)
- Q_PROPERTY(Qt::Orientations rangeZoom READ rangeZoom WRITE setRangeZoom)
-
- public:
- explicit QCPAxisRect(QCustomPlot *parentPlot, bool setupDefaultAxes=true);
- virtual ~QCPAxisRect() Q_DECL_OVERRIDE;
-
- QPixmap background() const { return mBackgroundPixmap; }
- QBrush backgroundBrush() const { return mBackgroundBrush; }
- bool backgroundScaled() const { return mBackgroundScaled; }
- Qt::AspectRatioMode backgroundScaledMode() const { return mBackgroundScaledMode; }
- Qt::Orientations rangeDrag() const { return mRangeDrag; }
- Qt::Orientations rangeZoom() const { return mRangeZoom; }
- QCPAxis *rangeDragAxis(Qt::Orientation orientation);
- QCPAxis *rangeZoomAxis(Qt::Orientation orientation);
- QList<QCPAxis*> rangeDragAxes(Qt::Orientation orientation);
- QList<QCPAxis*> rangeZoomAxes(Qt::Orientation orientation);
- double rangeZoomFactor(Qt::Orientation orientation);
-
- void setBackground(const QPixmap &pm);
- void setBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode=Qt::KeepAspectRatioByExpanding);
- void setBackground(const QBrush &brush);
- void setBackgroundScaled(bool scaled);
- void setBackgroundScaledMode(Qt::AspectRatioMode mode);
- void setRangeDrag(Qt::Orientations orientations);
- void setRangeZoom(Qt::Orientations orientations);
- void setRangeDragAxes(QCPAxis *horizontal, QCPAxis *vertical);
- void setRangeDragAxes(QList<QCPAxis*> axes);
- void setRangeDragAxes(QList<QCPAxis*> horizontal, QList<QCPAxis*> vertical);
- void setRangeZoomAxes(QCPAxis *horizontal, QCPAxis *vertical);
- void setRangeZoomAxes(QList<QCPAxis*> axes);
- void setRangeZoomAxes(QList<QCPAxis*> horizontal, QList<QCPAxis*> vertical);
- void setRangeZoomFactor(double horizontalFactor, double verticalFactor);
- void setRangeZoomFactor(double factor);
-
- int axisCount(QCPAxis::AxisType type) const;
- QCPAxis *axis(QCPAxis::AxisType type, int index=0) const;
- QList<QCPAxis*> axes(QCPAxis::AxisTypes types) const;
- QList<QCPAxis*> axes() const;
- QCPAxis *addAxis(QCPAxis::AxisType type, QCPAxis *axis=nullptr);
- QList<QCPAxis*> addAxes(QCPAxis::AxisTypes types);
- bool removeAxis(QCPAxis *axis);
- QCPLayoutInset *insetLayout() const { return mInsetLayout; }
- void zoom(const QRectF &pixelRect);
- void zoom(const QRectF &pixelRect, const QList<QCPAxis*> &affectedAxes);
- void setupFullAxesBox(bool connectRanges=false);
- QList<QCPAbstractPlottable*> plottables() const;
- QList<QCPGraph*> graphs() const;
- QList<QCPAbstractItem*> items() const;
-
- double left() const { return mRect.left(); }
- double right() const { return mRect.right(); }
- double top() const { return mRect.top(); }
- double bottom() const { return mRect.bottom(); }
- double width() const { return mRect.width(); }
- double height() const { return mRect.height(); }
- QSizeF size() const { return mRect.size(); }
- QPointF topLeft() const { return mRect.topLeft(); }
- QPointF topRight() const { return mRect.topRight(); }
- QPointF bottomLeft() const { return mRect.bottomLeft(); }
- QPointF bottomRight() const { return mRect.bottomRight(); }
- QPointF center() const { return mRect.center(); }
-
- virtual void update(UpdatePhase phase) Q_DECL_OVERRIDE;
- virtual QList<QCPLayoutElement*> elements(bool recursive) const Q_DECL_OVERRIDE;
- protected:
-
- QBrush mBackgroundBrush;
- QPixmap mBackgroundPixmap;
- QPixmap mScaledBackgroundPixmap;
- bool mBackgroundScaled;
- Qt::AspectRatioMode mBackgroundScaledMode;
- QCPLayoutInset *mInsetLayout;
- Qt::Orientations mRangeDrag, mRangeZoom;
- QList<QPointer<QCPAxis> > mRangeDragHorzAxis, mRangeDragVertAxis;
- QList<QPointer<QCPAxis> > mRangeZoomHorzAxis, mRangeZoomVertAxis;
- double mRangeZoomFactorHorz, mRangeZoomFactorVert;
-
- QList<QCPRange> mDragStartHorzRange, mDragStartVertRange;
- QCP::AntialiasedElements mAADragBackup, mNotAADragBackup;
- bool mDragging;
- QHash<QCPAxis::AxisType, QList<QCPAxis*> > mAxes;
-
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual double calculateAutoMargin(QCP::MarginSide side) Q_DECL_OVERRIDE;
- virtual void layoutChanged() Q_DECL_OVERRIDE;
-
- virtual void mousePressEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
- virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
-
- void drawBackground(QCPPainter *painter);
- void updateAxesOffset(QCPAxis::AxisType type);
- private:
- Q_DISABLE_COPY(QCPAxisRect)
- friend class QCustomPlot;
- };
- class QCP_LIB_DECL QCPAbstractLegendItem : public QCPLayoutElement
- {
- Q_OBJECT
-
- Q_PROPERTY(QCPLegend* parentLegend READ parentLegend)
- Q_PROPERTY(QFont font READ font WRITE setFont)
- Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor)
- Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont)
- Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor)
- Q_PROPERTY(bool selectable READ selectable WRITE setSelectable NOTIFY selectionChanged)
- Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectableChanged)
-
- public:
- explicit QCPAbstractLegendItem(QCPLegend *parent);
-
- QCPLegend *parentLegend() const { return mParentLegend; }
- QFont font() const { return mFont; }
- QColor textColor() const { return mTextColor; }
- QFont selectedFont() const { return mSelectedFont; }
- QColor selectedTextColor() const { return mSelectedTextColor; }
- bool selectable() const { return mSelectable; }
- bool selected() const { return mSelected; }
-
- void setFont(const QFont &font);
- void setTextColor(const QColor &color);
- void setSelectedFont(const QFont &font);
- void setSelectedTextColor(const QColor &color);
- Q_SLOT void setSelectable(bool selectable);
- Q_SLOT void setSelected(bool selected);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- signals:
- void selectionChanged(bool selected);
- void selectableChanged(bool selectable);
- protected:
-
- QCPLegend *mParentLegend;
- QFont mFont;
- QColor mTextColor;
- QFont mSelectedFont;
- QColor mSelectedTextColor;
- bool mSelectable, mSelected;
-
- virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual QRectF clipRect() const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE = 0;
-
- virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
- virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
- private:
- Q_DISABLE_COPY(QCPAbstractLegendItem)
- friend class QCPLegend;
- };
- class QCP_LIB_DECL QCPPlottableLegendItem : public QCPAbstractLegendItem
- {
- Q_OBJECT
- public:
- QCPPlottableLegendItem(QCPLegend *parent, QCPAbstractPlottable *plottable);
-
- QCPAbstractPlottable *plottable() { return mPlottable; }
- protected:
-
- QCPAbstractPlottable *mPlottable;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QSizeF minimumOuterSizeHint() const Q_DECL_OVERRIDE;
-
- QPen getIconBorderPen() const;
- QColor getTextColor() const;
- QFont getFont() const;
- };
- class QCP_LIB_DECL QCPLegend : public QCPLayoutGrid
- {
- Q_OBJECT
-
- Q_PROPERTY(QPen borderPen READ borderPen WRITE setBorderPen)
- Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
- Q_PROPERTY(QFont font READ font WRITE setFont)
- Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor)
- Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
- Q_PROPERTY(int iconTextPadding READ iconTextPadding WRITE setIconTextPadding)
- Q_PROPERTY(QPen iconBorderPen READ iconBorderPen WRITE setIconBorderPen)
- Q_PROPERTY(SelectableParts selectableParts READ selectableParts WRITE setSelectableParts NOTIFY selectionChanged)
- Q_PROPERTY(SelectableParts selectedParts READ selectedParts WRITE setSelectedParts NOTIFY selectableChanged)
- Q_PROPERTY(QPen selectedBorderPen READ selectedBorderPen WRITE setSelectedBorderPen)
- Q_PROPERTY(QPen selectedIconBorderPen READ selectedIconBorderPen WRITE setSelectedIconBorderPen)
- Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush)
- Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont)
- Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor)
-
- public:
-
- enum SelectablePart { spNone = 0x000
- ,spLegendBox = 0x001
- ,spItems = 0x002
- };
- Q_ENUMS(SelectablePart)
- Q_FLAGS(SelectableParts)
- Q_DECLARE_FLAGS(SelectableParts, SelectablePart)
- explicit QCPLegend();
- virtual ~QCPLegend() Q_DECL_OVERRIDE;
-
- QPen borderPen() const { return mBorderPen; }
- QBrush brush() const { return mBrush; }
- QFont font() const { return mFont; }
- QColor textColor() const { return mTextColor; }
- QSize iconSize() const { return mIconSize; }
- int iconTextPadding() const { return mIconTextPadding; }
- QPen iconBorderPen() const { return mIconBorderPen; }
- SelectableParts selectableParts() const { return mSelectableParts; }
- SelectableParts selectedParts() const;
- QPen selectedBorderPen() const { return mSelectedBorderPen; }
- QPen selectedIconBorderPen() const { return mSelectedIconBorderPen; }
- QBrush selectedBrush() const { return mSelectedBrush; }
- QFont selectedFont() const { return mSelectedFont; }
- QColor selectedTextColor() const { return mSelectedTextColor; }
-
- void setBorderPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setFont(const QFont &font);
- void setTextColor(const QColor &color);
- void setIconSize(const QSize &size);
- void setIconSize(int width, int height);
- void setIconTextPadding(int padding);
- void setIconBorderPen(const QPen &pen);
- Q_SLOT void setSelectableParts(const SelectableParts &selectableParts);
- Q_SLOT void setSelectedParts(const SelectableParts &selectedParts);
- void setSelectedBorderPen(const QPen &pen);
- void setSelectedIconBorderPen(const QPen &pen);
- void setSelectedBrush(const QBrush &brush);
- void setSelectedFont(const QFont &font);
- void setSelectedTextColor(const QColor &color);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
-
- QCPAbstractLegendItem *item(int index) const;
- QCPPlottableLegendItem *itemWithPlottable(const QCPAbstractPlottable *plottable) const;
- int itemCount() const;
- bool hasItem(QCPAbstractLegendItem *item) const;
- bool hasItemWithPlottable(const QCPAbstractPlottable *plottable) const;
- bool addItem(QCPAbstractLegendItem *item);
- bool removeItem(int index);
- bool removeItem(QCPAbstractLegendItem *item);
- void clearItems();
- QList<QCPAbstractLegendItem*> selectedItems() const;
- signals:
- void selectionChanged(QCPLegend::SelectableParts parts);
- void selectableChanged(QCPLegend::SelectableParts parts);
- protected:
-
- QPen mBorderPen, mIconBorderPen;
- QBrush mBrush;
- QFont mFont;
- QColor mTextColor;
- QSize mIconSize;
- int mIconTextPadding;
- SelectableParts mSelectedParts, mSelectableParts;
- QPen mSelectedBorderPen, mSelectedIconBorderPen;
- QBrush mSelectedBrush;
- QFont mSelectedFont;
- QColor mSelectedTextColor;
-
- virtual void parentPlotInitialized(QCustomPlot *parentPlot) Q_DECL_OVERRIDE;
- virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
-
- virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
- virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
-
- QPen getBorderPen() const;
- QBrush getBrush() const;
- private:
- Q_DISABLE_COPY(QCPLegend)
- friend class QCustomPlot;
- friend class QCPAbstractLegendItem;
- };
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCPLegend::SelectableParts)
- Q_DECLARE_METATYPE(QCPLegend::SelectablePart)
- class QCP_LIB_DECL QCPTextElement : public QCPLayoutElement
- {
- Q_OBJECT
-
- Q_PROPERTY(QString text READ text WRITE setText)
- Q_PROPERTY(QFont font READ font WRITE setFont)
- Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor)
- Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont)
- Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor)
- Q_PROPERTY(bool selectable READ selectable WRITE setSelectable NOTIFY selectableChanged)
- Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectionChanged)
-
- public:
- explicit QCPTextElement(QCustomPlot *parentPlot);
- QCPTextElement(QCustomPlot *parentPlot, const QString &text);
- QCPTextElement(QCustomPlot *parentPlot, const QString &text, double pointSize);
- QCPTextElement(QCustomPlot *parentPlot, const QString &text, const QString &fontFamily, double pointSize);
- QCPTextElement(QCustomPlot *parentPlot, const QString &text, const QFont &font);
-
- QString text() const { return mText; }
- int textFlags() const { return mTextFlags; }
- QFont font() const { return mFont; }
- QColor textColor() const { return mTextColor; }
- QFont selectedFont() const { return mSelectedFont; }
- QColor selectedTextColor() const { return mSelectedTextColor; }
- bool selectable() const { return mSelectable; }
- bool selected() const { return mSelected; }
-
- void setText(const QString &text);
- void setTextFlags(int flags);
- void setFont(const QFont &font);
- void setTextColor(const QColor &color);
- void setSelectedFont(const QFont &font);
- void setSelectedTextColor(const QColor &color);
- Q_SLOT void setSelectable(bool selectable);
- Q_SLOT void setSelected(bool selected);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- virtual void mousePressEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
- virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void mouseDoubleClickEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
- signals:
- void selectionChanged(bool selected);
- void selectableChanged(bool selectable);
- void clicked(QMouseEvent *event);
- void doubleClicked(QMouseEvent *event);
- protected:
-
- QString mText;
- int mTextFlags;
- QFont mFont;
- QColor mTextColor;
- QFont mSelectedFont;
- QColor mSelectedTextColor;
- QRectF mTextBoundingRect;
- bool mSelectable, mSelected;
-
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QSizeF minimumOuterSizeHint() const Q_DECL_OVERRIDE;
- virtual QSizeF maximumOuterSizeHint() const Q_DECL_OVERRIDE;
-
- virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
- virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
-
- QFont mainFont() const;
- QColor mainTextColor() const;
- private:
- Q_DISABLE_COPY(QCPTextElement)
- };
- class QCPColorScaleAxisRectPrivate : public QCPAxisRect
- {
- Q_OBJECT
- public:
- explicit QCPColorScaleAxisRectPrivate(QCPColorScale *parentColorScale);
- protected:
- QCPColorScale *mParentColorScale;
- QImage mGradientImage;
- bool mGradientImageInvalidated;
-
- using QCPAxisRect::calculateAutoMargin;
- using QCPAxisRect::mousePressEvent;
- using QCPAxisRect::mouseMoveEvent;
- using QCPAxisRect::mouseReleaseEvent;
- using QCPAxisRect::wheelEvent;
- using QCPAxisRect::update;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- void updateGradientImage();
- Q_SLOT void axisSelectionChanged(QCPAxis::SelectableParts selectedParts);
- Q_SLOT void axisSelectableChanged(QCPAxis::SelectableParts selectableParts);
- friend class QCPColorScale;
- };
- class QCP_LIB_DECL QCPColorScale : public QCPLayoutElement
- {
- Q_OBJECT
-
- Q_PROPERTY(QCPAxis::AxisType type READ type WRITE setType)
- Q_PROPERTY(QCPRange dataRange READ dataRange WRITE setDataRange NOTIFY dataRangeChanged)
- Q_PROPERTY(QCPAxis::ScaleType dataScaleType READ dataScaleType WRITE setDataScaleType NOTIFY dataScaleTypeChanged)
- Q_PROPERTY(QCPColorGradient gradient READ gradient WRITE setGradient NOTIFY gradientChanged)
- Q_PROPERTY(QString label READ label WRITE setLabel)
- Q_PROPERTY(int barWidth READ barWidth WRITE setBarWidth)
- Q_PROPERTY(bool rangeDrag READ rangeDrag WRITE setRangeDrag)
- Q_PROPERTY(bool rangeZoom READ rangeZoom WRITE setRangeZoom)
-
- public:
- explicit QCPColorScale(QCustomPlot *parentPlot);
- virtual ~QCPColorScale() Q_DECL_OVERRIDE;
-
- QCPAxis *axis() const { return mColorAxis.data(); }
- QCPAxis::AxisType type() const { return mType; }
- QCPRange dataRange() const { return mDataRange; }
- QCPAxis::ScaleType dataScaleType() const { return mDataScaleType; }
- QCPColorGradient gradient() const { return mGradient; }
- QString label() const;
- int barWidth () const { return mBarWidth; }
- bool rangeDrag() const;
- bool rangeZoom() const;
-
- void setType(QCPAxis::AxisType type);
- Q_SLOT void setDataRange(const QCPRange &dataRange);
- Q_SLOT void setDataScaleType(QCPAxis::ScaleType scaleType);
- Q_SLOT void setGradient(const QCPColorGradient &gradient);
- void setLabel(const QString &str);
- void setBarWidth(int width);
- void setRangeDrag(bool enabled);
- void setRangeZoom(bool enabled);
-
- QList<QCPColorMap*> colorMaps() const;
- void rescaleDataRange(bool onlyVisibleMaps);
-
- virtual void update(UpdatePhase phase) Q_DECL_OVERRIDE;
- signals:
- void dataRangeChanged(const QCPRange &newRange);
- void dataScaleTypeChanged(QCPAxis::ScaleType scaleType);
- void gradientChanged(const QCPColorGradient &newGradient);
- protected:
-
- QCPAxis::AxisType mType;
- QCPRange mDataRange;
- QCPAxis::ScaleType mDataScaleType;
- QCPColorGradient mGradient;
- int mBarWidth;
-
- QPointer<QCPColorScaleAxisRectPrivate> mAxisRect;
- QPointer<QCPAxis> mColorAxis;
-
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
-
- virtual void mousePressEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
- virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
- private:
- Q_DISABLE_COPY(QCPColorScale)
- friend class QCPColorScaleAxisRectPrivate;
- };
- class QCP_LIB_DECL QCPGraphData
- {
- public:
- QCPGraphData();
- QCPGraphData(double key, double value);
- inline double sortKey() const { return key; }
- inline static QCPGraphData fromSortKey(double sortKey) { return QCPGraphData(sortKey, 0); }
- inline static bool sortKeyIsMainKey() { return true; }
- inline double mainKey() const { return key; }
- inline double mainValue() const { return value; }
- inline QCPRange valueRange() const { return QCPRange(value, value); }
- double key, value;
- };
- Q_DECLARE_TYPEINFO(QCPGraphData, Q_PRIMITIVE_TYPE);
- typedef QCPDataContainer<QCPGraphData> QCPGraphDataContainer;
- class QCP_LIB_DECL QCPGraph : public QCPAbstractPlottable1D<QCPGraphData>
- {
- Q_OBJECT
-
- Q_PROPERTY(LineStyle lineStyle READ lineStyle WRITE setLineStyle)
- Q_PROPERTY(QCPScatterStyle scatterStyle READ scatterStyle WRITE setScatterStyle)
- Q_PROPERTY(int scatterSkip READ scatterSkip WRITE setScatterSkip)
- Q_PROPERTY(QCPGraph* channelFillGraph READ channelFillGraph WRITE setChannelFillGraph)
- Q_PROPERTY(bool adaptiveSampling READ adaptiveSampling WRITE setAdaptiveSampling)
-
- public:
-
- enum LineStyle { lsNone
-
- ,lsLine
- ,lsStepLeft
- ,lsStepRight
- ,lsStepCenter
- ,lsImpulse
- };
- Q_ENUMS(LineStyle)
- explicit QCPGraph(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPGraph() Q_DECL_OVERRIDE;
-
- QSharedPointer<QCPGraphDataContainer> data() const { return mDataContainer; }
- LineStyle lineStyle() const { return mLineStyle; }
- QCPScatterStyle scatterStyle() const { return mScatterStyle; }
- int scatterSkip() const { return mScatterSkip; }
- QCPGraph *channelFillGraph() const { return mChannelFillGraph.data(); }
- bool adaptiveSampling() const { return mAdaptiveSampling; }
-
- void setData(QSharedPointer<QCPGraphDataContainer> data);
- void setData(const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
- void setLineStyle(LineStyle ls);
- void setScatterStyle(const QCPScatterStyle &style);
- void setScatterSkip(int skip);
- void setChannelFillGraph(QCPGraph *targetGraph);
- void setAdaptiveSampling(bool enabled);
-
- void addData(const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
- void addData(double key, double value);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
- virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
- protected:
-
- LineStyle mLineStyle;
- QCPScatterStyle mScatterStyle;
- int mScatterSkip;
- QPointer<QCPGraph> mChannelFillGraph;
- bool mAdaptiveSampling;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
-
- virtual void drawFill(QCPPainter *painter, QVector<QPointF> *lines) const;
- virtual void drawScatterPlot(QCPPainter *painter, const QVector<QPointF> &scatters, const QCPScatterStyle &style) const;
- virtual void drawLinePlot(QCPPainter *painter, const QVector<QPointF> &lines) const;
- virtual void drawImpulsePlot(QCPPainter *painter, const QVector<QPointF> &lines) const;
- virtual void getOptimizedLineData(QVector<QCPGraphData> *lineData, const QCPGraphDataContainer::const_iterator &begin, const QCPGraphDataContainer::const_iterator &end) const;
- virtual void getOptimizedScatterData(QVector<QCPGraphData> *scatterData, QCPGraphDataContainer::const_iterator begin, QCPGraphDataContainer::const_iterator end) const;
-
- void getVisibleDataBounds(QCPGraphDataContainer::const_iterator &begin, QCPGraphDataContainer::const_iterator &end, const QCPDataRange &rangeRestriction) const;
- void getLines(QVector<QPointF> *lines, const QCPDataRange &dataRange) const;
- void getScatters(QVector<QPointF> *scatters, const QCPDataRange &dataRange) const;
- QVector<QPointF> dataToLines(const QVector<QCPGraphData> &data) const;
- QVector<QPointF> dataToStepLeftLines(const QVector<QCPGraphData> &data) const;
- QVector<QPointF> dataToStepRightLines(const QVector<QCPGraphData> &data) const;
- QVector<QPointF> dataToStepCenterLines(const QVector<QCPGraphData> &data) const;
- QVector<QPointF> dataToImpulseLines(const QVector<QCPGraphData> &data) const;
- QVector<QCPDataRange> getNonNanSegments(const QVector<QPointF> *lineData, Qt::Orientation keyOrientation) const;
- QVector<QPair<QCPDataRange, QCPDataRange> > getOverlappingSegments(QVector<QCPDataRange> thisSegments, const QVector<QPointF> *thisData, QVector<QCPDataRange> otherSegments, const QVector<QPointF> *otherData) const;
- bool segmentsIntersect(double aLower, double aUpper, double bLower, double bUpper, int &bPrecedence) const;
- QPointF getFillBasePoint(QPointF matchingDataPoint) const;
- const QPolygonF getFillPolygon(const QVector<QPointF> *lineData, QCPDataRange segment) const;
- const QPolygonF getChannelFillPolygon(const QVector<QPointF> *thisData, QCPDataRange thisSegment, const QVector<QPointF> *otherData, QCPDataRange otherSegment) const;
- int findIndexBelowX(const QVector<QPointF> *data, double x) const;
- int findIndexAboveX(const QVector<QPointF> *data, double x) const;
- int findIndexBelowY(const QVector<QPointF> *data, double y) const;
- int findIndexAboveY(const QVector<QPointF> *data, double y) const;
- double pointDistance(const QPointF &pixelPoint, QCPGraphDataContainer::const_iterator &closestData) const;
- friend class QCustomPlot;
- friend class QCPLegend;
- friend class PlotTimeGraph;
- };
- Q_DECLARE_METATYPE(QCPGraph::LineStyle)
- class QCP_LIB_DECL QCPCurveData
- {
- public:
- QCPCurveData();
- QCPCurveData(double t, double key, double value);
- inline double sortKey() const { return t; }
- inline static QCPCurveData fromSortKey(double sortKey) { return QCPCurveData(sortKey, 0, 0); }
- inline static bool sortKeyIsMainKey() { return false; }
- inline double mainKey() const { return key; }
- inline double mainValue() const { return value; }
- inline QCPRange valueRange() const { return QCPRange(value, value); }
- double t, key, value;
- };
- Q_DECLARE_TYPEINFO(QCPCurveData, Q_PRIMITIVE_TYPE);
- typedef QCPDataContainer<QCPCurveData> QCPCurveDataContainer;
- class QCP_LIB_DECL QCPCurve : public QCPAbstractPlottable1D<QCPCurveData>
- {
- Q_OBJECT
-
- Q_PROPERTY(QCPScatterStyle scatterStyle READ scatterStyle WRITE setScatterStyle)
- Q_PROPERTY(int scatterSkip READ scatterSkip WRITE setScatterSkip)
- Q_PROPERTY(LineStyle lineStyle READ lineStyle WRITE setLineStyle)
-
- public:
-
- enum LineStyle { lsNone
- ,lsLine
- };
- Q_ENUMS(LineStyle)
- explicit QCPCurve(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPCurve() Q_DECL_OVERRIDE;
-
- QSharedPointer<QCPCurveDataContainer> data() const { return mDataContainer; }
- QCPScatterStyle scatterStyle() const { return mScatterStyle; }
- int scatterSkip() const { return mScatterSkip; }
- LineStyle lineStyle() const { return mLineStyle; }
-
- void setData(QSharedPointer<QCPCurveDataContainer> data);
- void setData(const QVector<double> &t, const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
- void setData(const QVector<double> &keys, const QVector<double> &values);
- void setScatterStyle(const QCPScatterStyle &style);
- void setScatterSkip(int skip);
- void setLineStyle(LineStyle style);
-
- void addData(const QVector<double> &t, const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
- void addData(const QVector<double> &keys, const QVector<double> &values);
- void addData(double t, double key, double value);
- void addData(double key, double value);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
- virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
- protected:
-
- QCPScatterStyle mScatterStyle;
- int mScatterSkip;
- LineStyle mLineStyle;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
-
- virtual void drawCurveLine(QCPPainter *painter, const QVector<QPointF> &lines) const;
- virtual void drawScatterPlot(QCPPainter *painter, const QVector<QPointF> &points, const QCPScatterStyle &style) const;
-
- void getCurveLines(QVector<QPointF> *lines, const QCPDataRange &dataRange, double penWidth) const;
- void getScatters(QVector<QPointF> *scatters, const QCPDataRange &dataRange, double scatterWidth) const;
- int getRegion(double key, double value, double keyMin, double valueMax, double keyMax, double valueMin) const;
- QPointF getOptimizedPoint(int otherRegion, double otherKey, double otherValue, double key, double value, double keyMin, double valueMax, double keyMax, double valueMin) const;
- QVector<QPointF> getOptimizedCornerPoints(int prevRegion, int currentRegion, double prevKey, double prevValue, double key, double value, double keyMin, double valueMax, double keyMax, double valueMin) const;
- bool mayTraverse(int prevRegion, int currentRegion) const;
- bool getTraverse(double prevKey, double prevValue, double key, double value, double keyMin, double valueMax, double keyMax, double valueMin, QPointF &crossA, QPointF &crossB) const;
- void getTraverseCornerPoints(int prevRegion, int currentRegion, double keyMin, double valueMax, double keyMax, double valueMin, QVector<QPointF> &beforeTraverse, QVector<QPointF> &afterTraverse) const;
- double pointDistance(const QPointF &pixelPoint, QCPCurveDataContainer::const_iterator &closestData) const;
- friend class QCustomPlot;
- friend class QCPLegend;
- };
- Q_DECLARE_METATYPE(QCPCurve::LineStyle)
- class QCP_LIB_DECL QCPBarsGroup : public QObject
- {
- Q_OBJECT
-
- Q_PROPERTY(SpacingType spacingType READ spacingType WRITE setSpacingType)
- Q_PROPERTY(double spacing READ spacing WRITE setSpacing)
-
- public:
-
- enum SpacingType { stAbsolute
- ,stAxisRectRatio
- ,stPlotCoords
- };
- Q_ENUMS(SpacingType)
- explicit QCPBarsGroup(QCustomPlot *parentPlot);
- virtual ~QCPBarsGroup();
-
- SpacingType spacingType() const { return mSpacingType; }
- double spacing() const { return mSpacing; }
-
- void setSpacingType(SpacingType spacingType);
- void setSpacing(double spacing);
-
- QList<QCPBars*> bars() const { return mBars; }
- QCPBars* bars(int index) const;
- int size() const { return mBars.size(); }
- bool isEmpty() const { return mBars.isEmpty(); }
- void clear();
- bool contains(QCPBars *bars) const { return mBars.contains(bars); }
- void append(QCPBars *bars);
- void insert(int i, QCPBars *bars);
- void remove(QCPBars *bars);
- protected:
-
- QCustomPlot *mParentPlot;
- SpacingType mSpacingType;
- double mSpacing;
- QList<QCPBars*> mBars;
-
- void registerBars(QCPBars *bars);
- void unregisterBars(QCPBars *bars);
-
- double keyPixelOffset(const QCPBars *bars, double keyCoord);
- double getPixelSpacing(const QCPBars *bars, double keyCoord);
- private:
- Q_DISABLE_COPY(QCPBarsGroup)
- friend class QCPBars;
- };
- Q_DECLARE_METATYPE(QCPBarsGroup::SpacingType)
- class QCP_LIB_DECL QCPBarsData
- {
- public:
- QCPBarsData();
- QCPBarsData(double key, double value);
- inline double sortKey() const { return key; }
- inline static QCPBarsData fromSortKey(double sortKey) { return QCPBarsData(sortKey, 0); }
- inline static bool sortKeyIsMainKey() { return true; }
- inline double mainKey() const { return key; }
- inline double mainValue() const { return value; }
- inline QCPRange valueRange() const { return QCPRange(value, value); }
- double key, value;
- };
- Q_DECLARE_TYPEINFO(QCPBarsData, Q_PRIMITIVE_TYPE);
- typedef QCPDataContainer<QCPBarsData> QCPBarsDataContainer;
- class QCP_LIB_DECL QCPBars : public QCPAbstractPlottable1D<QCPBarsData>
- {
- Q_OBJECT
-
- Q_PROPERTY(double width READ width WRITE setWidth)
- Q_PROPERTY(WidthType widthType READ widthType WRITE setWidthType)
- Q_PROPERTY(QCPBarsGroup* barsGroup READ barsGroup WRITE setBarsGroup)
- Q_PROPERTY(double baseValue READ baseValue WRITE setBaseValue)
- Q_PROPERTY(double stackingGap READ stackingGap WRITE setStackingGap)
- Q_PROPERTY(QCPBars* barBelow READ barBelow)
- Q_PROPERTY(QCPBars* barAbove READ barAbove)
-
- public:
-
- enum WidthType { wtAbsolute
- ,wtAxisRectRatio
- ,wtPlotCoords
- };
- Q_ENUMS(WidthType)
- explicit QCPBars(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPBars() Q_DECL_OVERRIDE;
-
- double width() const { return mWidth; }
- WidthType widthType() const { return mWidthType; }
- QCPBarsGroup *barsGroup() const { return mBarsGroup; }
- double baseValue() const { return mBaseValue; }
- double stackingGap() const { return mStackingGap; }
- QCPBars *barBelow() const { return mBarBelow.data(); }
- QCPBars *barAbove() const { return mBarAbove.data(); }
- QSharedPointer<QCPBarsDataContainer> data() const { return mDataContainer; }
-
- void setData(QSharedPointer<QCPBarsDataContainer> data);
- void setData(const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
- void setWidth(double width);
- void setWidthType(WidthType widthType);
- void setBarsGroup(QCPBarsGroup *barsGroup);
- void setBaseValue(double baseValue);
- void setStackingGap(double pixels);
-
- void addData(const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
- void addData(double key, double value);
- void moveBelow(QCPBars *bars);
- void moveAbove(QCPBars *bars);
-
- virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const Q_DECL_OVERRIDE;
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
- virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
- virtual QPointF dataPixelPosition(int index) const Q_DECL_OVERRIDE;
- protected:
-
- double mWidth;
- WidthType mWidthType;
- QCPBarsGroup *mBarsGroup;
- double mBaseValue;
- double mStackingGap;
- QPointer<QCPBars> mBarBelow, mBarAbove;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
-
- void getVisibleDataBounds(QCPBarsDataContainer::const_iterator &begin, QCPBarsDataContainer::const_iterator &end) const;
- QRectF getBarRect(double key, double value) const;
- void getPixelWidth(double key, double &lower, double &upper) const;
- double getStackedBaseValue(double key, bool positive) const;
- static void connectBars(QCPBars* lower, QCPBars* upper);
- friend class QCustomPlot;
- friend class QCPLegend;
- friend class QCPBarsGroup;
- };
- Q_DECLARE_METATYPE(QCPBars::WidthType)
- class QCP_LIB_DECL QCPStatisticalBoxData
- {
- public:
- QCPStatisticalBoxData();
- QCPStatisticalBoxData(double key, double minimum, double lowerQuartile, double median, double upperQuartile, double maximum, const QVector<double>& outliers=QVector<double>());
- inline double sortKey() const { return key; }
- inline static QCPStatisticalBoxData fromSortKey(double sortKey) { return QCPStatisticalBoxData(sortKey, 0, 0, 0, 0, 0); }
- inline static bool sortKeyIsMainKey() { return true; }
- inline double mainKey() const { return key; }
- inline double mainValue() const { return median; }
- inline QCPRange valueRange() const
- {
- QCPRange result(minimum, maximum);
- for (QVector<double>::const_iterator it = outliers.constBegin(); it != outliers.constEnd(); ++it)
- result.expand(*it);
- return result;
- }
- double key, minimum, lowerQuartile, median, upperQuartile, maximum;
- QVector<double> outliers;
- };
- Q_DECLARE_TYPEINFO(QCPStatisticalBoxData, Q_MOVABLE_TYPE);
- typedef QCPDataContainer<QCPStatisticalBoxData> QCPStatisticalBoxDataContainer;
- class QCP_LIB_DECL QCPStatisticalBox : public QCPAbstractPlottable1D<QCPStatisticalBoxData>
- {
- Q_OBJECT
-
- Q_PROPERTY(double width READ width WRITE setWidth)
- Q_PROPERTY(double whiskerWidth READ whiskerWidth WRITE setWhiskerWidth)
- Q_PROPERTY(QPen whiskerPen READ whiskerPen WRITE setWhiskerPen)
- Q_PROPERTY(QPen whiskerBarPen READ whiskerBarPen WRITE setWhiskerBarPen)
- Q_PROPERTY(bool whiskerAntialiased READ whiskerAntialiased WRITE setWhiskerAntialiased)
- Q_PROPERTY(QPen medianPen READ medianPen WRITE setMedianPen)
- Q_PROPERTY(QCPScatterStyle outlierStyle READ outlierStyle WRITE setOutlierStyle)
-
- public:
- explicit QCPStatisticalBox(QCPAxis *keyAxis, QCPAxis *valueAxis);
-
- QSharedPointer<QCPStatisticalBoxDataContainer> data() const { return mDataContainer; }
- double width() const { return mWidth; }
- double whiskerWidth() const { return mWhiskerWidth; }
- QPen whiskerPen() const { return mWhiskerPen; }
- QPen whiskerBarPen() const { return mWhiskerBarPen; }
- bool whiskerAntialiased() const { return mWhiskerAntialiased; }
- QPen medianPen() const { return mMedianPen; }
- QCPScatterStyle outlierStyle() const { return mOutlierStyle; }
-
- void setData(QSharedPointer<QCPStatisticalBoxDataContainer> data);
- void setData(const QVector<double> &keys, const QVector<double> &minimum, const QVector<double> &lowerQuartile, const QVector<double> &median, const QVector<double> &upperQuartile, const QVector<double> &maximum, bool alreadySorted=false);
- void setWidth(double width);
- void setWhiskerWidth(double width);
- void setWhiskerPen(const QPen &pen);
- void setWhiskerBarPen(const QPen &pen);
- void setWhiskerAntialiased(bool enabled);
- void setMedianPen(const QPen &pen);
- void setOutlierStyle(const QCPScatterStyle &style);
-
- void addData(const QVector<double> &keys, const QVector<double> &minimum, const QVector<double> &lowerQuartile, const QVector<double> &median, const QVector<double> &upperQuartile, const QVector<double> &maximum, bool alreadySorted=false);
- void addData(double key, double minimum, double lowerQuartile, double median, double upperQuartile, double maximum, const QVector<double> &outliers=QVector<double>());
-
- virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const Q_DECL_OVERRIDE;
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
- virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
- protected:
-
- double mWidth;
- double mWhiskerWidth;
- QPen mWhiskerPen, mWhiskerBarPen;
- bool mWhiskerAntialiased;
- QPen mMedianPen;
- QCPScatterStyle mOutlierStyle;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
-
- virtual void drawStatisticalBox(QCPPainter *painter, QCPStatisticalBoxDataContainer::const_iterator it, const QCPScatterStyle &outlierStyle) const;
-
- void getVisibleDataBounds(QCPStatisticalBoxDataContainer::const_iterator &begin, QCPStatisticalBoxDataContainer::const_iterator &end) const;
- QRectF getQuartileBox(QCPStatisticalBoxDataContainer::const_iterator it) const;
- QVector<QLineF> getWhiskerBackboneLines(QCPStatisticalBoxDataContainer::const_iterator it) const;
- QVector<QLineF> getWhiskerBarLines(QCPStatisticalBoxDataContainer::const_iterator it) const;
- friend class QCustomPlot;
- friend class QCPLegend;
- };
- class QCP_LIB_DECL QCPColorMapData
- {
- public:
- QCPColorMapData(int keySize, int valueSize, const QCPRange &keyRange, const QCPRange &valueRange);
- ~QCPColorMapData();
- QCPColorMapData(const QCPColorMapData &other);
- QCPColorMapData &operator=(const QCPColorMapData &other);
-
- int keySize() const { return mKeySize; }
- int valueSize() const { return mValueSize; }
- QCPRange keyRange() const { return mKeyRange; }
- QCPRange valueRange() const { return mValueRange; }
- QCPRange dataBounds() const { return mDataBounds; }
- double data(double key, double value);
- double cell(int keyIndex, int valueIndex);
- unsigned char alpha(int keyIndex, int valueIndex);
-
- void setSize(int keySize, int valueSize);
- void setKeySize(int keySize);
- void setValueSize(int valueSize);
- void setRange(const QCPRange &keyRange, const QCPRange &valueRange);
- void setKeyRange(const QCPRange &keyRange);
- void setValueRange(const QCPRange &valueRange);
- void setData(double key, double value, double z);
- void setCell(int keyIndex, int valueIndex, double z);
- void setAlpha(int keyIndex, int valueIndex, unsigned char alpha);
-
- void recalculateDataBounds();
- void clear();
- void clearAlpha();
- void fill(double z);
- void fillAlpha(unsigned char alpha);
- bool isEmpty() const { return mIsEmpty; }
- void coordToCell(double key, double value, int *keyIndex, int *valueIndex) const;
- void cellToCoord(int keyIndex, int valueIndex, double *key, double *value) const;
- protected:
-
- int mKeySize, mValueSize;
- QCPRange mKeyRange, mValueRange;
- bool mIsEmpty;
-
- double *mData;
- unsigned char *mAlpha;
- QCPRange mDataBounds;
- bool mDataModified;
- bool createAlpha(bool initializeOpaque=true);
- friend class QCPColorMap;
- };
- class QCP_LIB_DECL QCPColorMap : public QCPAbstractPlottable
- {
- Q_OBJECT
-
- Q_PROPERTY(QCPRange dataRange READ dataRange WRITE setDataRange NOTIFY dataRangeChanged)
- Q_PROPERTY(QCPAxis::ScaleType dataScaleType READ dataScaleType WRITE setDataScaleType NOTIFY dataScaleTypeChanged)
- Q_PROPERTY(QCPColorGradient gradient READ gradient WRITE setGradient NOTIFY gradientChanged)
- Q_PROPERTY(bool interpolate READ interpolate WRITE setInterpolate)
- Q_PROPERTY(bool tightBoundary READ tightBoundary WRITE setTightBoundary)
- Q_PROPERTY(QCPColorScale* colorScale READ colorScale WRITE setColorScale)
-
- public:
- explicit QCPColorMap(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPColorMap() Q_DECL_OVERRIDE;
-
- QCPColorMapData *data() const { return mMapData; }
- QCPRange dataRange() const { return mDataRange; }
- QCPAxis::ScaleType dataScaleType() const { return mDataScaleType; }
- bool interpolate() const { return mInterpolate; }
- bool tightBoundary() const { return mTightBoundary; }
- QCPColorGradient gradient() const { return mGradient; }
- QCPColorScale *colorScale() const { return mColorScale.data(); }
-
- void setData(QCPColorMapData *data, bool copy=false);
- Q_SLOT void setDataRange(const QCPRange &dataRange);
- Q_SLOT void setDataScaleType(QCPAxis::ScaleType scaleType);
- Q_SLOT void setGradient(const QCPColorGradient &gradient);
- void setInterpolate(bool enabled);
- void setTightBoundary(bool enabled);
- void setColorScale(QCPColorScale *colorScale);
-
- void rescaleDataRange(bool recalculateDataBounds=false);
- Q_SLOT void updateLegendIcon(Qt::TransformationMode transformMode=Qt::SmoothTransformation, const QSize &thumbSize=QSize(32, 18));
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
- virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
- signals:
- void dataRangeChanged(const QCPRange &newRange);
- void dataScaleTypeChanged(QCPAxis::ScaleType scaleType);
- void gradientChanged(const QCPColorGradient &newGradient);
- protected:
-
- QCPRange mDataRange;
- QCPAxis::ScaleType mDataScaleType;
- QCPColorMapData *mMapData;
- QCPColorGradient mGradient;
- bool mInterpolate;
- bool mTightBoundary;
- QPointer<QCPColorScale> mColorScale;
-
- QImage mMapImage, mUndersampledMapImage;
- QPixmap mLegendIcon;
- bool mMapImageInvalidated;
-
- virtual void updateMapImage();
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
- friend class QCustomPlot;
- friend class QCPLegend;
- };
- class QCP_LIB_DECL QCPFinancialData
- {
- public:
- QCPFinancialData();
- QCPFinancialData(double key, double open, double high, double low, double close);
- inline double sortKey() const { return key; }
- inline static QCPFinancialData fromSortKey(double sortKey) { return QCPFinancialData(sortKey, 0, 0, 0, 0); }
- inline static bool sortKeyIsMainKey() { return true; }
- inline double mainKey() const { return key; }
- inline double mainValue() const { return open; }
- inline QCPRange valueRange() const { return QCPRange(low, high); }
- double key, open, high, low, close;
- };
- Q_DECLARE_TYPEINFO(QCPFinancialData, Q_PRIMITIVE_TYPE);
- typedef QCPDataContainer<QCPFinancialData> QCPFinancialDataContainer;
- class QCP_LIB_DECL QCPFinancial : public QCPAbstractPlottable1D<QCPFinancialData>
- {
- Q_OBJECT
-
- Q_PROPERTY(ChartStyle chartStyle READ chartStyle WRITE setChartStyle)
- Q_PROPERTY(double width READ width WRITE setWidth)
- Q_PROPERTY(WidthType widthType READ widthType WRITE setWidthType)
- Q_PROPERTY(bool twoColored READ twoColored WRITE setTwoColored)
- Q_PROPERTY(QBrush brushPositive READ brushPositive WRITE setBrushPositive)
- Q_PROPERTY(QBrush brushNegative READ brushNegative WRITE setBrushNegative)
- Q_PROPERTY(QPen penPositive READ penPositive WRITE setPenPositive)
- Q_PROPERTY(QPen penNegative READ penNegative WRITE setPenNegative)
-
- public:
-
- enum WidthType { wtAbsolute
- ,wtAxisRectRatio
- ,wtPlotCoords
- };
- Q_ENUMS(WidthType)
-
- enum ChartStyle { csOhlc
- ,csCandlestick
- };
- Q_ENUMS(ChartStyle)
- explicit QCPFinancial(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPFinancial() Q_DECL_OVERRIDE;
-
- QSharedPointer<QCPFinancialDataContainer> data() const { return mDataContainer; }
- ChartStyle chartStyle() const { return mChartStyle; }
- double width() const { return mWidth; }
- WidthType widthType() const { return mWidthType; }
- bool twoColored() const { return mTwoColored; }
- QBrush brushPositive() const { return mBrushPositive; }
- QBrush brushNegative() const { return mBrushNegative; }
- QPen penPositive() const { return mPenPositive; }
- QPen penNegative() const { return mPenNegative; }
-
- void setData(QSharedPointer<QCPFinancialDataContainer> data);
- void setData(const QVector<double> &keys, const QVector<double> &open, const QVector<double> &high, const QVector<double> &low, const QVector<double> &close, bool alreadySorted=false);
- void setChartStyle(ChartStyle style);
- void setWidth(double width);
- void setWidthType(WidthType widthType);
- void setTwoColored(bool twoColored);
- void setBrushPositive(const QBrush &brush);
- void setBrushNegative(const QBrush &brush);
- void setPenPositive(const QPen &pen);
- void setPenNegative(const QPen &pen);
-
- void addData(const QVector<double> &keys, const QVector<double> &open, const QVector<double> &high, const QVector<double> &low, const QVector<double> &close, bool alreadySorted=false);
- void addData(double key, double open, double high, double low, double close);
-
- virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const Q_DECL_OVERRIDE;
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
- virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
-
- static QCPFinancialDataContainer timeSeriesToOhlc(const QVector<double> &time, const QVector<double> &value, double timeBinSize, double timeBinOffset = 0);
- protected:
-
- ChartStyle mChartStyle;
- double mWidth;
- WidthType mWidthType;
- bool mTwoColored;
- QBrush mBrushPositive, mBrushNegative;
- QPen mPenPositive, mPenNegative;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
-
- void drawOhlcPlot(QCPPainter *painter, const QCPFinancialDataContainer::const_iterator &begin, const QCPFinancialDataContainer::const_iterator &end, bool isSelected);
- void drawCandlestickPlot(QCPPainter *painter, const QCPFinancialDataContainer::const_iterator &begin, const QCPFinancialDataContainer::const_iterator &end, bool isSelected);
- double getPixelWidth(double key, double keyPixel) const;
- double ohlcSelectTest(const QPointF &pos, const QCPFinancialDataContainer::const_iterator &begin, const QCPFinancialDataContainer::const_iterator &end, QCPFinancialDataContainer::const_iterator &closestDataPoint) const;
- double candlestickSelectTest(const QPointF &pos, const QCPFinancialDataContainer::const_iterator &begin, const QCPFinancialDataContainer::const_iterator &end, QCPFinancialDataContainer::const_iterator &closestDataPoint) const;
- void getVisibleDataBounds(QCPFinancialDataContainer::const_iterator &begin, QCPFinancialDataContainer::const_iterator &end) const;
- QRectF selectionHitBox(QCPFinancialDataContainer::const_iterator it) const;
- friend class QCustomPlot;
- friend class QCPLegend;
- };
- Q_DECLARE_METATYPE(QCPFinancial::ChartStyle)
- class QCP_LIB_DECL QCPErrorBarsData
- {
- public:
- QCPErrorBarsData();
- explicit QCPErrorBarsData(double error);
- QCPErrorBarsData(double errorMinus, double errorPlus);
- double errorMinus, errorPlus;
- };
- Q_DECLARE_TYPEINFO(QCPErrorBarsData, Q_PRIMITIVE_TYPE);
- typedef QVector<QCPErrorBarsData> QCPErrorBarsDataContainer;
- class QCP_LIB_DECL QCPErrorBars : public QCPAbstractPlottable, public QCPPlottableInterface1D
- {
- Q_OBJECT
-
- Q_PROPERTY(QSharedPointer<QCPErrorBarsDataContainer> data READ data WRITE setData)
- Q_PROPERTY(QCPAbstractPlottable* dataPlottable READ dataPlottable WRITE setDataPlottable)
- Q_PROPERTY(ErrorType errorType READ errorType WRITE setErrorType)
- Q_PROPERTY(double whiskerWidth READ whiskerWidth WRITE setWhiskerWidth)
- Q_PROPERTY(double symbolGap READ symbolGap WRITE setSymbolGap)
-
- public:
-
- enum ErrorType { etKeyError
- ,etValueError
- };
- Q_ENUMS(ErrorType)
- explicit QCPErrorBars(QCPAxis *keyAxis, QCPAxis *valueAxis);
- virtual ~QCPErrorBars() Q_DECL_OVERRIDE;
-
- QSharedPointer<QCPErrorBarsDataContainer> data() const { return mDataContainer; }
- QCPAbstractPlottable *dataPlottable() const { return mDataPlottable.data(); }
- ErrorType errorType() const { return mErrorType; }
- double whiskerWidth() const { return mWhiskerWidth; }
- double symbolGap() const { return mSymbolGap; }
-
- void setData(QSharedPointer<QCPErrorBarsDataContainer> data);
- void setData(const QVector<double> &error);
- void setData(const QVector<double> &errorMinus, const QVector<double> &errorPlus);
- void setDataPlottable(QCPAbstractPlottable* plottable);
- void setErrorType(ErrorType type);
- void setWhiskerWidth(double pixels);
- void setSymbolGap(double pixels);
-
- void addData(const QVector<double> &error);
- void addData(const QVector<double> &errorMinus, const QVector<double> &errorPlus);
- void addData(double error);
- void addData(double errorMinus, double errorPlus);
-
- virtual int dataCount() const Q_DECL_OVERRIDE;
- virtual double dataMainKey(int index) const Q_DECL_OVERRIDE;
- virtual double dataSortKey(int index) const Q_DECL_OVERRIDE;
- virtual double dataMainValue(int index) const Q_DECL_OVERRIDE;
- virtual QCPRange dataValueRange(int index) const Q_DECL_OVERRIDE;
- virtual QPointF dataPixelPosition(int index) const Q_DECL_OVERRIDE;
- virtual bool sortKeyIsMainKey() const Q_DECL_OVERRIDE;
- virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const Q_DECL_OVERRIDE;
- virtual int findBegin(double sortKey, bool expandedRange=true) const Q_DECL_OVERRIDE;
- virtual int findEnd(double sortKey, bool expandedRange=true) const Q_DECL_OVERRIDE;
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- virtual QCPPlottableInterface1D *interface1D() Q_DECL_OVERRIDE { return this; }
- protected:
-
- QSharedPointer<QCPErrorBarsDataContainer> mDataContainer;
- QPointer<QCPAbstractPlottable> mDataPlottable;
- ErrorType mErrorType;
- double mWhiskerWidth;
- double mSymbolGap;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
- virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
- virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
-
- void getErrorBarLines(QCPErrorBarsDataContainer::const_iterator it, QVector<QLineF> &backbones, QVector<QLineF> &whiskers) const;
- void getVisibleDataBounds(QCPErrorBarsDataContainer::const_iterator &begin, QCPErrorBarsDataContainer::const_iterator &end, const QCPDataRange &rangeRestriction) const;
- double pointDistance(const QPointF &pixelPoint, QCPErrorBarsDataContainer::const_iterator &closestData) const;
-
- void getDataSegments(QList<QCPDataRange> &selectedSegments, QList<QCPDataRange> &unselectedSegments) const;
- bool errorBarVisible(int index) const;
- bool rectIntersectsLine(const QRectF &pixelRect, const QLineF &line) const;
- friend class QCustomPlot;
- friend class QCPLegend;
- };
- class QCP_LIB_DECL QCPItemStraightLine : public QCPAbstractItem
- {
- Q_OBJECT
-
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
-
- public:
- explicit QCPItemStraightLine(QCustomPlot *parentPlot);
- virtual ~QCPItemStraightLine() Q_DECL_OVERRIDE;
-
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
-
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- QCPItemPosition * const point1;
- QCPItemPosition * const point2;
- protected:
-
- QPen mPen, mSelectedPen;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
-
- QLineF getRectClippedStraightLine(const QCPVector2D &base, const QCPVector2D &vec, const QRectF &rect) const;
- QPen mainPen() const;
- };
- class QCP_LIB_DECL QCPItemLine : public QCPAbstractItem
- {
- Q_OBJECT
-
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
- Q_PROPERTY(QCPLineEnding head READ head WRITE setHead)
- Q_PROPERTY(QCPLineEnding tail READ tail WRITE setTail)
-
- public:
- explicit QCPItemLine(QCustomPlot *parentPlot);
- virtual ~QCPItemLine() Q_DECL_OVERRIDE;
-
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QCPLineEnding head() const { return mHead; }
- QCPLineEnding tail() const { return mTail; }
-
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setHead(const QCPLineEnding &head);
- void setTail(const QCPLineEnding &tail);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- QCPItemPosition * const start;
- QCPItemPosition * const end;
- protected:
-
- QPen mPen, mSelectedPen;
- QCPLineEnding mHead, mTail;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
-
- QLineF getRectClippedLine(const QCPVector2D &start, const QCPVector2D &end, const QRectF &rect) const;
- QPen mainPen() const;
- };
- class QCP_LIB_DECL QCPItemCurve : public QCPAbstractItem
- {
- Q_OBJECT
-
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
- Q_PROPERTY(QCPLineEnding head READ head WRITE setHead)
- Q_PROPERTY(QCPLineEnding tail READ tail WRITE setTail)
-
- public:
- explicit QCPItemCurve(QCustomPlot *parentPlot);
- virtual ~QCPItemCurve() Q_DECL_OVERRIDE;
-
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QCPLineEnding head() const { return mHead; }
- QCPLineEnding tail() const { return mTail; }
-
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setHead(const QCPLineEnding &head);
- void setTail(const QCPLineEnding &tail);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- QCPItemPosition * const start;
- QCPItemPosition * const startDir;
- QCPItemPosition * const endDir;
- QCPItemPosition * const end;
- protected:
-
- QPen mPen, mSelectedPen;
- QCPLineEnding mHead, mTail;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
-
- QPen mainPen() const;
- };
- class QCP_LIB_DECL QCPItemRect : public QCPAbstractItem
- {
- Q_OBJECT
-
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
- Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
- Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush)
-
- public:
- explicit QCPItemRect(QCustomPlot *parentPlot);
- virtual ~QCPItemRect() Q_DECL_OVERRIDE;
-
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QBrush brush() const { return mBrush; }
- QBrush selectedBrush() const { return mSelectedBrush; }
-
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setSelectedBrush(const QBrush &brush);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- QCPItemPosition * const topLeft;
- QCPItemPosition * const bottomRight;
- QCPItemAnchor * const top;
- QCPItemAnchor * const topRight;
- QCPItemAnchor * const right;
- QCPItemAnchor * const bottom;
- QCPItemAnchor * const bottomLeft;
- QCPItemAnchor * const left;
- protected:
- enum AnchorIndex {aiTop, aiTopRight, aiRight, aiBottom, aiBottomLeft, aiLeft};
-
- QPen mPen, mSelectedPen;
- QBrush mBrush, mSelectedBrush;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QPointF anchorPixelPosition(int anchorId) const Q_DECL_OVERRIDE;
-
- QPen mainPen() const;
- QBrush mainBrush() const;
- };
- class QCP_LIB_DECL QCPItemText : public QCPAbstractItem
- {
- Q_OBJECT
-
- Q_PROPERTY(QColor color READ color WRITE setColor)
- Q_PROPERTY(QColor selectedColor READ selectedColor WRITE setSelectedColor)
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
- Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
- Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush)
- Q_PROPERTY(QFont font READ font WRITE setFont)
- Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont)
- Q_PROPERTY(QString text READ text WRITE setText)
- Q_PROPERTY(Qt::Alignment positionAlignment READ positionAlignment WRITE setPositionAlignment)
- Q_PROPERTY(Qt::Alignment textAlignment READ textAlignment WRITE setTextAlignment)
- Q_PROPERTY(double rotation READ rotation WRITE setRotation)
- Q_PROPERTY(QMargins padding READ padding WRITE setPadding)
-
- public:
- explicit QCPItemText(QCustomPlot *parentPlot);
- virtual ~QCPItemText() Q_DECL_OVERRIDE;
-
- QColor color() const { return mColor; }
- QColor selectedColor() const { return mSelectedColor; }
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QBrush brush() const { return mBrush; }
- QBrush selectedBrush() const { return mSelectedBrush; }
- QFont font() const { return mFont; }
- QFont selectedFont() const { return mSelectedFont; }
- QString text() const { return mText; }
- Qt::Alignment positionAlignment() const { return mPositionAlignment; }
- Qt::Alignment textAlignment() const { return mTextAlignment; }
- double rotation() const { return mRotation; }
- QMargins padding() const { return mPadding; }
-
- void setColor(const QColor &color);
- void setSelectedColor(const QColor &color);
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setSelectedBrush(const QBrush &brush);
- void setFont(const QFont &font);
- void setSelectedFont(const QFont &font);
- void setText(const QString &text);
- void setPositionAlignment(Qt::Alignment alignment);
- void setTextAlignment(Qt::Alignment alignment);
- void setRotation(double degrees);
- void setPadding(const QMargins &padding);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- QCPItemPosition * const position;
- QCPItemAnchor * const topLeft;
- QCPItemAnchor * const top;
- QCPItemAnchor * const topRight;
- QCPItemAnchor * const right;
- QCPItemAnchor * const bottomRight;
- QCPItemAnchor * const bottom;
- QCPItemAnchor * const bottomLeft;
- QCPItemAnchor * const left;
- protected:
- enum AnchorIndex {aiTopLeft, aiTop, aiTopRight, aiRight, aiBottomRight, aiBottom, aiBottomLeft, aiLeft};
-
- QColor mColor, mSelectedColor;
- QPen mPen, mSelectedPen;
- QBrush mBrush, mSelectedBrush;
- QFont mFont, mSelectedFont;
- QString mText;
- Qt::Alignment mPositionAlignment;
- Qt::Alignment mTextAlignment;
- double mRotation;
- QMargins mPadding;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QPointF anchorPixelPosition(int anchorId) const Q_DECL_OVERRIDE;
-
- QPointF getTextDrawPoint(const QPointF &pos, const QRectF &rect, Qt::Alignment positionAlignment) const;
- QFont mainFont() const;
- QColor mainColor() const;
- QPen mainPen() const;
- QBrush mainBrush() const;
- };
- class QCP_LIB_DECL QCPItemEllipse : public QCPAbstractItem
- {
- Q_OBJECT
-
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
- Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
- Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush)
-
- public:
- explicit QCPItemEllipse(QCustomPlot *parentPlot);
- virtual ~QCPItemEllipse() Q_DECL_OVERRIDE;
-
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QBrush brush() const { return mBrush; }
- QBrush selectedBrush() const { return mSelectedBrush; }
-
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setSelectedBrush(const QBrush &brush);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- QCPItemPosition * const topLeft;
- QCPItemPosition * const bottomRight;
- QCPItemAnchor * const topLeftRim;
- QCPItemAnchor * const top;
- QCPItemAnchor * const topRightRim;
- QCPItemAnchor * const right;
- QCPItemAnchor * const bottomRightRim;
- QCPItemAnchor * const bottom;
- QCPItemAnchor * const bottomLeftRim;
- QCPItemAnchor * const left;
- QCPItemAnchor * const center;
- protected:
- enum AnchorIndex {aiTopLeftRim, aiTop, aiTopRightRim, aiRight, aiBottomRightRim, aiBottom, aiBottomLeftRim, aiLeft, aiCenter};
-
- QPen mPen, mSelectedPen;
- QBrush mBrush, mSelectedBrush;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QPointF anchorPixelPosition(int anchorId) const Q_DECL_OVERRIDE;
-
- QPen mainPen() const;
- QBrush mainBrush() const;
- };
- class QCP_LIB_DECL QCPItemPixmap : public QCPAbstractItem
- {
- Q_OBJECT
-
- Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
- Q_PROPERTY(bool scaled READ scaled WRITE setScaled)
- Q_PROPERTY(Qt::AspectRatioMode aspectRatioMode READ aspectRatioMode)
- Q_PROPERTY(Qt::TransformationMode transformationMode READ transformationMode)
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
-
- public:
- explicit QCPItemPixmap(QCustomPlot *parentPlot);
- virtual ~QCPItemPixmap() Q_DECL_OVERRIDE;
-
- QPixmap pixmap() const { return mPixmap; }
- bool scaled() const { return mScaled; }
- Qt::AspectRatioMode aspectRatioMode() const { return mAspectRatioMode; }
- Qt::TransformationMode transformationMode() const { return mTransformationMode; }
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
-
- void setPixmap(const QPixmap &pixmap);
- void setScaled(bool scaled, Qt::AspectRatioMode aspectRatioMode=Qt::KeepAspectRatio, Qt::TransformationMode transformationMode=Qt::SmoothTransformation);
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- QCPItemPosition * const topLeft;
- QCPItemPosition * const bottomRight;
- QCPItemAnchor * const top;
- QCPItemAnchor * const topRight;
- QCPItemAnchor * const right;
- QCPItemAnchor * const bottom;
- QCPItemAnchor * const bottomLeft;
- QCPItemAnchor * const left;
- protected:
- enum AnchorIndex {aiTop, aiTopRight, aiRight, aiBottom, aiBottomLeft, aiLeft};
-
- QPixmap mPixmap;
- QPixmap mScaledPixmap;
- bool mScaled;
- bool mScaledPixmapInvalidated;
- Qt::AspectRatioMode mAspectRatioMode;
- Qt::TransformationMode mTransformationMode;
- QPen mPen, mSelectedPen;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QPointF anchorPixelPosition(int anchorId) const Q_DECL_OVERRIDE;
-
- void updateScaledPixmap(QRectF finalRect=QRectF(), bool flipHorz=false, bool flipVert=false);
- QRectF getFinalRect(bool *flippedHorz=nullptr, bool *flippedVert=nullptr) const;
- QPen mainPen() const;
- };
- class QCP_LIB_DECL QCPItemTracer : public QCPAbstractItem
- {
- Q_OBJECT
-
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
- Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
- Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush)
- Q_PROPERTY(double size READ size WRITE setSize)
- Q_PROPERTY(TracerStyle style READ style WRITE setStyle)
- Q_PROPERTY(QCPGraph* graph READ graph WRITE setGraph)
- Q_PROPERTY(double graphKey READ graphKey WRITE setGraphKey)
- Q_PROPERTY(bool interpolating READ interpolating WRITE setInterpolating)
-
- public:
-
- enum TracerStyle { tsNone
- ,tsPlus
- ,tsCrosshair
- ,tsCircle
- ,tsSquare
- };
- Q_ENUMS(TracerStyle)
- explicit QCPItemTracer(QCustomPlot *parentPlot);
- virtual ~QCPItemTracer() Q_DECL_OVERRIDE;
-
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- QBrush brush() const { return mBrush; }
- QBrush selectedBrush() const { return mSelectedBrush; }
- double size() const { return mSize; }
- TracerStyle style() const { return mStyle; }
- QCPGraph *graph() const { return mGraph; }
- double graphKey() const { return mGraphKey; }
- bool interpolating() const { return mInterpolating; }
-
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setSelectedBrush(const QBrush &brush);
- void setSize(double size);
- void setStyle(TracerStyle style);
- void setGraph(QCPGraph *graph);
- void setGraphKey(double key);
- void setInterpolating(bool enabled);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
-
- void updatePosition();
- QCPItemPosition * const position;
- protected:
-
- QPen mPen, mSelectedPen;
- QBrush mBrush, mSelectedBrush;
- double mSize;
- TracerStyle mStyle;
- QCPGraph *mGraph;
- double mGraphKey;
- bool mInterpolating;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
-
- QPen mainPen() const;
- QBrush mainBrush() const;
- };
- Q_DECLARE_METATYPE(QCPItemTracer::TracerStyle)
- class QCP_LIB_DECL QCPItemBracket : public QCPAbstractItem
- {
- Q_OBJECT
-
- Q_PROPERTY(QPen pen READ pen WRITE setPen)
- Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
- Q_PROPERTY(double length READ length WRITE setLength)
- Q_PROPERTY(BracketStyle style READ style WRITE setStyle)
-
- public:
-
- enum BracketStyle { bsSquare
- ,bsRound
- ,bsCurly
- ,bsCalligraphic
- };
- Q_ENUMS(BracketStyle)
- explicit QCPItemBracket(QCustomPlot *parentPlot);
- virtual ~QCPItemBracket() Q_DECL_OVERRIDE;
-
- QPen pen() const { return mPen; }
- QPen selectedPen() const { return mSelectedPen; }
- double length() const { return mLength; }
- BracketStyle style() const { return mStyle; }
-
- void setPen(const QPen &pen);
- void setSelectedPen(const QPen &pen);
- void setLength(double length);
- void setStyle(BracketStyle style);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- QCPItemPosition * const left;
- QCPItemPosition * const right;
- QCPItemAnchor * const center;
- protected:
-
- enum AnchorIndex {aiCenter};
- QPen mPen, mSelectedPen;
- double mLength;
- BracketStyle mStyle;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QPointF anchorPixelPosition(int anchorId) const Q_DECL_OVERRIDE;
-
- QPen mainPen() const;
- };
- Q_DECLARE_METATYPE(QCPItemBracket::BracketStyle)
- class QCP_LIB_DECL QCPPolarAxisRadial : public QCPLayerable
- {
- Q_OBJECT
-
-
- public:
-
- enum AngleReference { arAbsolute
- ,arAngularAxis
- };
- Q_ENUMS(AngleReference)
-
- enum ScaleType { stLinear
- ,stLogarithmic
- };
- Q_ENUMS(ScaleType)
-
- enum SelectablePart { spNone = 0
- ,spAxis = 0x001
- ,spTickLabels = 0x002
- ,spAxisLabel = 0x004
- };
- Q_ENUMS(SelectablePart)
- Q_FLAGS(SelectableParts)
- Q_DECLARE_FLAGS(SelectableParts, SelectablePart)
- enum LabelMode { lmUpright
- ,lmRotated
- };
- Q_ENUMS(LabelMode)
- explicit QCPPolarAxisRadial(QCPPolarAxisAngular *parent);
- virtual ~QCPPolarAxisRadial() Q_DECL_OVERRIDE;
-
- bool rangeDrag() const { return mRangeDrag; }
- bool rangeZoom() const { return mRangeZoom; }
- double rangeZoomFactor() const { return mRangeZoomFactor; }
- QCPPolarAxisAngular *angularAxis() const { return mAngularAxis; }
- ScaleType scaleType() const { return mScaleType; }
- const QCPRange range() const { return mRange; }
- bool rangeReversed() const { return mRangeReversed; }
- double angle() const { return mAngle; }
- AngleReference angleReference() const { return mAngleReference; }
- QSharedPointer<QCPAxisTicker> ticker() const { return mTicker; }
- bool ticks() const { return mTicks; }
- bool tickLabels() const { return mTickLabels; }
- int tickLabelPadding() const { return mLabelPainter.padding(); }
- QFont tickLabelFont() const { return mTickLabelFont; }
- QColor tickLabelColor() const { return mTickLabelColor; }
- double tickLabelRotation() const { return mLabelPainter.rotation(); }
- LabelMode tickLabelMode() const;
- QString numberFormat() const;
- int numberPrecision() const { return mNumberPrecision; }
- QVector<double> tickVector() const { return mTickVector; }
- QVector<double> subTickVector() const { return mSubTickVector; }
- QVector<QString> tickVectorLabels() const { return mTickVectorLabels; }
- int tickLengthIn() const;
- int tickLengthOut() const;
- bool subTicks() const { return mSubTicks; }
- int subTickLengthIn() const;
- int subTickLengthOut() const;
- QPen basePen() const { return mBasePen; }
- QPen tickPen() const { return mTickPen; }
- QPen subTickPen() const { return mSubTickPen; }
- QFont labelFont() const { return mLabelFont; }
- QColor labelColor() const { return mLabelColor; }
- QString label() const { return mLabel; }
- int labelPadding() const;
- SelectableParts selectedParts() const { return mSelectedParts; }
- SelectableParts selectableParts() const { return mSelectableParts; }
- QFont selectedTickLabelFont() const { return mSelectedTickLabelFont; }
- QFont selectedLabelFont() const { return mSelectedLabelFont; }
- QColor selectedTickLabelColor() const { return mSelectedTickLabelColor; }
- QColor selectedLabelColor() const { return mSelectedLabelColor; }
- QPen selectedBasePen() const { return mSelectedBasePen; }
- QPen selectedTickPen() const { return mSelectedTickPen; }
- QPen selectedSubTickPen() const { return mSelectedSubTickPen; }
-
- void setRangeDrag(bool enabled);
- void setRangeZoom(bool enabled);
- void setRangeZoomFactor(double factor);
- Q_SLOT void setScaleType(QCPPolarAxisRadial::ScaleType type);
- Q_SLOT void setRange(const QCPRange &range);
- void setRange(double lower, double upper);
- void setRange(double position, double size, Qt::AlignmentFlag alignment);
- void setRangeLower(double lower);
- void setRangeUpper(double upper);
- void setRangeReversed(bool reversed);
- void setAngle(double degrees);
- void setAngleReference(AngleReference reference);
- void setTicker(QSharedPointer<QCPAxisTicker> ticker);
- void setTicks(bool show);
- void setTickLabels(bool show);
- void setTickLabelPadding(int padding);
- void setTickLabelFont(const QFont &font);
- void setTickLabelColor(const QColor &color);
- void setTickLabelRotation(double degrees);
- void setTickLabelMode(LabelMode mode);
- void setNumberFormat(const QString &formatCode);
- void setNumberPrecision(int precision);
- void setTickLength(int inside, int outside=0);
- void setTickLengthIn(int inside);
- void setTickLengthOut(int outside);
- void setSubTicks(bool show);
- void setSubTickLength(int inside, int outside=0);
- void setSubTickLengthIn(int inside);
- void setSubTickLengthOut(int outside);
- void setBasePen(const QPen &pen);
- void setTickPen(const QPen &pen);
- void setSubTickPen(const QPen &pen);
- void setLabelFont(const QFont &font);
- void setLabelColor(const QColor &color);
- void setLabel(const QString &str);
- void setLabelPadding(int padding);
- void setSelectedTickLabelFont(const QFont &font);
- void setSelectedLabelFont(const QFont &font);
- void setSelectedTickLabelColor(const QColor &color);
- void setSelectedLabelColor(const QColor &color);
- void setSelectedBasePen(const QPen &pen);
- void setSelectedTickPen(const QPen &pen);
- void setSelectedSubTickPen(const QPen &pen);
- Q_SLOT void setSelectableParts(const QCPPolarAxisRadial::SelectableParts &selectableParts);
- Q_SLOT void setSelectedParts(const QCPPolarAxisRadial::SelectableParts &selectedParts);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
-
- void moveRange(double diff);
- void scaleRange(double factor);
- void scaleRange(double factor, double center);
- void rescale(bool onlyVisiblePlottables=false);
- void pixelToCoord(QPointF pixelPos, double &angleCoord, double &radiusCoord) const;
- QPointF coordToPixel(double angleCoord, double radiusCoord) const;
- double coordToRadius(double coord) const;
- double radiusToCoord(double radius) const;
- SelectablePart getPartAt(const QPointF &pos) const;
- signals:
- void rangeChanged(const QCPRange &newRange);
- void rangeChanged(const QCPRange &newRange, const QCPRange &oldRange);
- void scaleTypeChanged(QCPPolarAxisRadial::ScaleType scaleType);
- void selectionChanged(const QCPPolarAxisRadial::SelectableParts &parts);
- void selectableChanged(const QCPPolarAxisRadial::SelectableParts &parts);
- protected:
-
- bool mRangeDrag;
- bool mRangeZoom;
- double mRangeZoomFactor;
-
- QCPPolarAxisAngular *mAngularAxis;
- double mAngle;
- AngleReference mAngleReference;
- SelectableParts mSelectableParts, mSelectedParts;
- QPen mBasePen, mSelectedBasePen;
-
- int mLabelPadding;
- QString mLabel;
- QFont mLabelFont, mSelectedLabelFont;
- QColor mLabelColor, mSelectedLabelColor;
-
-
- bool mTickLabels;
-
- QFont mTickLabelFont, mSelectedTickLabelFont;
- QColor mTickLabelColor, mSelectedTickLabelColor;
- int mNumberPrecision;
- QLatin1Char mNumberFormatChar;
- bool mNumberBeautifulPowers;
- bool mNumberMultiplyCross;
-
- bool mTicks;
- bool mSubTicks;
- int mTickLengthIn, mTickLengthOut, mSubTickLengthIn, mSubTickLengthOut;
- QPen mTickPen, mSelectedTickPen;
- QPen mSubTickPen, mSelectedSubTickPen;
-
- QCPRange mRange;
- bool mRangeReversed;
- ScaleType mScaleType;
-
- QPointF mCenter;
- double mRadius;
- QSharedPointer<QCPAxisTicker> mTicker;
- QVector<double> mTickVector;
- QVector<QString> mTickVectorLabels;
- QVector<double> mSubTickVector;
- bool mDragging;
- QCPRange mDragStartRange;
- QCP::AntialiasedElements mAADragBackup, mNotAADragBackup;
- QCPLabelPainterPrivate mLabelPainter;
-
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
-
- virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
- virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
-
- virtual void mousePressEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
- virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
-
- void updateGeometry(const QPointF ¢er, double radius);
- void setupTickVectors();
- QPen getBasePen() const;
- QPen getTickPen() const;
- QPen getSubTickPen() const;
- QFont getTickLabelFont() const;
- QFont getLabelFont() const;
- QColor getTickLabelColor() const;
- QColor getLabelColor() const;
- private:
- Q_DISABLE_COPY(QCPPolarAxisRadial)
- friend class QCustomPlot;
- friend class QCPPolarAxisAngular;
- };
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCPPolarAxisRadial::SelectableParts)
- Q_DECLARE_METATYPE(QCPPolarAxisRadial::AngleReference)
- Q_DECLARE_METATYPE(QCPPolarAxisRadial::ScaleType)
- Q_DECLARE_METATYPE(QCPPolarAxisRadial::SelectablePart)
- class QCP_LIB_DECL QCPPolarAxisAngular : public QCPLayoutElement
- {
- Q_OBJECT
-
-
- public:
-
- enum SelectablePart { spNone = 0
- ,spAxis = 0x001
- ,spTickLabels = 0x002
- ,spAxisLabel = 0x004
- };
- Q_ENUMS(SelectablePart)
- Q_FLAGS(SelectableParts)
- Q_DECLARE_FLAGS(SelectableParts, SelectablePart)
-
- enum LabelMode { lmUpright
- ,lmRotated
- };
- Q_ENUMS(LabelMode)
- explicit QCPPolarAxisAngular(QCustomPlot *parentPlot);
- virtual ~QCPPolarAxisAngular() Q_DECL_OVERRIDE;
-
- QPixmap background() const { return mBackgroundPixmap; }
- QBrush backgroundBrush() const { return mBackgroundBrush; }
- bool backgroundScaled() const { return mBackgroundScaled; }
- Qt::AspectRatioMode backgroundScaledMode() const { return mBackgroundScaledMode; }
- bool rangeDrag() const { return mRangeDrag; }
- bool rangeZoom() const { return mRangeZoom; }
- double rangeZoomFactor() const { return mRangeZoomFactor; }
- const QCPRange range() const { return mRange; }
- bool rangeReversed() const { return mRangeReversed; }
- double angle() const { return mAngle; }
- QSharedPointer<QCPAxisTicker> ticker() const { return mTicker; }
- bool ticks() const { return mTicks; }
- bool tickLabels() const { return mTickLabels; }
- int tickLabelPadding() const { return mLabelPainter.padding(); }
- QFont tickLabelFont() const { return mTickLabelFont; }
- QColor tickLabelColor() const { return mTickLabelColor; }
- double tickLabelRotation() const { return mLabelPainter.rotation(); }
- LabelMode tickLabelMode() const;
- QString numberFormat() const;
- int numberPrecision() const { return mNumberPrecision; }
- QVector<double> tickVector() const { return mTickVector; }
- QVector<QString> tickVectorLabels() const { return mTickVectorLabels; }
- int tickLengthIn() const { return mTickLengthIn; }
- int tickLengthOut() const { return mTickLengthOut; }
- bool subTicks() const { return mSubTicks; }
- int subTickLengthIn() const { return mSubTickLengthIn; }
- int subTickLengthOut() const { return mSubTickLengthOut; }
- QPen basePen() const { return mBasePen; }
- QPen tickPen() const { return mTickPen; }
- QPen subTickPen() const { return mSubTickPen; }
- QFont labelFont() const { return mLabelFont; }
- QColor labelColor() const { return mLabelColor; }
- QString label() const { return mLabel; }
- int labelPadding() const { return mLabelPadding; }
- SelectableParts selectedParts() const { return mSelectedParts; }
- SelectableParts selectableParts() const { return mSelectableParts; }
- QFont selectedTickLabelFont() const { return mSelectedTickLabelFont; }
- QFont selectedLabelFont() const { return mSelectedLabelFont; }
- QColor selectedTickLabelColor() const { return mSelectedTickLabelColor; }
- QColor selectedLabelColor() const { return mSelectedLabelColor; }
- QPen selectedBasePen() const { return mSelectedBasePen; }
- QPen selectedTickPen() const { return mSelectedTickPen; }
- QPen selectedSubTickPen() const { return mSelectedSubTickPen; }
- QCPPolarGrid *grid() const { return mGrid; }
-
- void setBackground(const QPixmap &pm);
- void setBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode=Qt::KeepAspectRatioByExpanding);
- void setBackground(const QBrush &brush);
- void setBackgroundScaled(bool scaled);
- void setBackgroundScaledMode(Qt::AspectRatioMode mode);
- void setRangeDrag(bool enabled);
- void setRangeZoom(bool enabled);
- void setRangeZoomFactor(double factor);
- Q_SLOT void setRange(const QCPRange &range);
- void setRange(double lower, double upper);
- void setRange(double position, double size, Qt::AlignmentFlag alignment);
- void setRangeLower(double lower);
- void setRangeUpper(double upper);
- void setRangeReversed(bool reversed);
- void setAngle(double degrees);
- void setTicker(QSharedPointer<QCPAxisTicker> ticker);
- void setTicks(bool show);
- void setTickLabels(bool show);
- void setTickLabelPadding(int padding);
- void setTickLabelFont(const QFont &font);
- void setTickLabelColor(const QColor &color);
- void setTickLabelRotation(double degrees);
- void setTickLabelMode(LabelMode mode);
- void setNumberFormat(const QString &formatCode);
- void setNumberPrecision(int precision);
- void setTickLength(int inside, int outside=0);
- void setTickLengthIn(int inside);
- void setTickLengthOut(int outside);
- void setSubTicks(bool show);
- void setSubTickLength(int inside, int outside=0);
- void setSubTickLengthIn(int inside);
- void setSubTickLengthOut(int outside);
- void setBasePen(const QPen &pen);
- void setTickPen(const QPen &pen);
- void setSubTickPen(const QPen &pen);
- void setLabelFont(const QFont &font);
- void setLabelColor(const QColor &color);
- void setLabel(const QString &str);
- void setLabelPadding(int padding);
- void setLabelPosition(Qt::AlignmentFlag position);
- void setSelectedTickLabelFont(const QFont &font);
- void setSelectedLabelFont(const QFont &font);
- void setSelectedTickLabelColor(const QColor &color);
- void setSelectedLabelColor(const QColor &color);
- void setSelectedBasePen(const QPen &pen);
- void setSelectedTickPen(const QPen &pen);
- void setSelectedSubTickPen(const QPen &pen);
- Q_SLOT void setSelectableParts(const QCPPolarAxisAngular::SelectableParts &selectableParts);
- Q_SLOT void setSelectedParts(const QCPPolarAxisAngular::SelectableParts &selectedParts);
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const Q_DECL_OVERRIDE;
- virtual void update(UpdatePhase phase) Q_DECL_OVERRIDE;
- virtual QList<QCPLayoutElement*> elements(bool recursive) const Q_DECL_OVERRIDE;
-
- bool removeGraph(QCPPolarGraph *graph);
- int radialAxisCount() const;
- QCPPolarAxisRadial *radialAxis(int index=0) const;
- QList<QCPPolarAxisRadial*> radialAxes() const;
- QCPPolarAxisRadial *addRadialAxis(QCPPolarAxisRadial *axis=nullptr);
- bool removeRadialAxis(QCPPolarAxisRadial *axis);
- QCPLayoutInset *insetLayout() const { return mInsetLayout; }
- QRegion exactClipRegion() const;
- void moveRange(double diff);
- void scaleRange(double factor);
- void scaleRange(double factor, double center);
- void rescale(bool onlyVisiblePlottables=false);
- double coordToAngleRad(double coord) const { return mAngleRad+(coord-mRange.lower)/mRange.size()*(mRangeReversed ? -2.0*M_PI : 2.0*M_PI); }
- double angleRadToCoord(double angleRad) const { return mRange.lower+(angleRad-mAngleRad)/(mRangeReversed ? -2.0*M_PI : 2.0*M_PI)*mRange.size(); }
- void pixelToCoord(QPointF pixelPos, double &angleCoord, double &radiusCoord) const;
- QPointF coordToPixel(double angleCoord, double radiusCoord) const;
- SelectablePart getPartAt(const QPointF &pos) const;
-
- double left() const { return mRect.left(); }
- double right() const { return mRect.right(); }
- double top() const { return mRect.top(); }
- double bottom() const { return mRect.bottom(); }
- double width() const { return mRect.width(); }
- double height() const { return mRect.height(); }
- QSizeF size() const { return mRect.size(); }
- QPointF topLeft() const { return mRect.topLeft(); }
- QPointF topRight() const { return mRect.topRight(); }
- QPointF bottomLeft() const { return mRect.bottomLeft(); }
- QPointF bottomRight() const { return mRect.bottomRight(); }
- QPointF center() const { return mCenter; }
- double radius() const { return mRadius; }
- signals:
- void rangeChanged(const QCPRange &newRange);
- void rangeChanged(const QCPRange &newRange, const QCPRange &oldRange);
- void selectionChanged(const QCPPolarAxisAngular::SelectableParts &parts);
- void selectableChanged(const QCPPolarAxisAngular::SelectableParts &parts);
- protected:
-
- QBrush mBackgroundBrush;
- QPixmap mBackgroundPixmap;
- QPixmap mScaledBackgroundPixmap;
- bool mBackgroundScaled;
- Qt::AspectRatioMode mBackgroundScaledMode;
- QCPLayoutInset *mInsetLayout;
- bool mRangeDrag;
- bool mRangeZoom;
- double mRangeZoomFactor;
-
- double mAngle, mAngleRad;
- SelectableParts mSelectableParts, mSelectedParts;
- QPen mBasePen, mSelectedBasePen;
-
- int mLabelPadding;
- QString mLabel;
- QFont mLabelFont, mSelectedLabelFont;
- QColor mLabelColor, mSelectedLabelColor;
-
-
- bool mTickLabels;
-
- QFont mTickLabelFont, mSelectedTickLabelFont;
- QColor mTickLabelColor, mSelectedTickLabelColor;
- int mNumberPrecision;
- QLatin1Char mNumberFormatChar;
- bool mNumberBeautifulPowers;
- bool mNumberMultiplyCross;
-
- bool mTicks;
- bool mSubTicks;
- int mTickLengthIn, mTickLengthOut, mSubTickLengthIn, mSubTickLengthOut;
- QPen mTickPen, mSelectedTickPen;
- QPen mSubTickPen, mSelectedSubTickPen;
-
- QCPRange mRange;
- bool mRangeReversed;
-
- QPointF mCenter;
- double mRadius;
- QList<QCPPolarAxisRadial*> mRadialAxes;
- QCPPolarGrid *mGrid;
- QList<QCPPolarGraph*> mGraphs;
- QSharedPointer<QCPAxisTicker> mTicker;
- QVector<double> mTickVector;
- QVector<QString> mTickVectorLabels;
- QVector<QPointF> mTickVectorCosSin;
- QVector<double> mSubTickVector;
- QVector<QPointF> mSubTickVectorCosSin;
- bool mDragging;
- QCPRange mDragAngularStart;
- QList<QCPRange> mDragRadialStart;
- QCP::AntialiasedElements mAADragBackup, mNotAADragBackup;
- QCPLabelPainterPrivate mLabelPainter;
-
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
-
- virtual void mousePressEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
- virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
- virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
-
- bool registerPolarGraph(QCPPolarGraph *graph);
- void drawBackground(QCPPainter *painter, const QPointF ¢er, double radius);
- void setupTickVectors();
- QPen getBasePen() const;
- QPen getTickPen() const;
- QPen getSubTickPen() const;
- QFont getTickLabelFont() const;
- QFont getLabelFont() const;
- QColor getTickLabelColor() const;
- QColor getLabelColor() const;
- private:
- Q_DISABLE_COPY(QCPPolarAxisAngular)
- friend class QCustomPlot;
- friend class QCPPolarGrid;
- friend class QCPPolarGraph;
- };
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCPPolarAxisAngular::SelectableParts)
- Q_DECLARE_METATYPE(QCPPolarAxisAngular::SelectablePart)
- class QCP_LIB_DECL QCPPolarGrid :public QCPLayerable
- {
- Q_OBJECT
-
-
- public:
-
- enum GridType { gtAngular = 0x01
- ,gtRadial = 0x02
- ,gtAll = 0xFF
- ,gtNone = 0x00
- };
- Q_ENUMS(GridType)
- Q_FLAGS(GridTypes)
- Q_DECLARE_FLAGS(GridTypes, GridType)
- explicit QCPPolarGrid(QCPPolarAxisAngular *parentAxis);
-
- QCPPolarAxisRadial *radialAxis() const { return mRadialAxis.data(); }
- GridTypes type() const { return mType; }
- GridTypes subGridType() const { return mSubGridType; }
- bool antialiasedSubGrid() const { return mAntialiasedSubGrid; }
- bool antialiasedZeroLine() const { return mAntialiasedZeroLine; }
- QPen angularPen() const { return mAngularPen; }
- QPen angularSubGridPen() const { return mAngularSubGridPen; }
- QPen radialPen() const { return mRadialPen; }
- QPen radialSubGridPen() const { return mRadialSubGridPen; }
- QPen radialZeroLinePen() const { return mRadialZeroLinePen; }
-
- void setRadialAxis(QCPPolarAxisRadial *axis);
- void setType(GridTypes type);
- void setSubGridType(GridTypes type);
- void setAntialiasedSubGrid(bool enabled);
- void setAntialiasedZeroLine(bool enabled);
- void setAngularPen(const QPen &pen);
- void setAngularSubGridPen(const QPen &pen);
- void setRadialPen(const QPen &pen);
- void setRadialSubGridPen(const QPen &pen);
- void setRadialZeroLinePen(const QPen &pen);
- protected:
-
- GridTypes mType;
- GridTypes mSubGridType;
- bool mAntialiasedSubGrid, mAntialiasedZeroLine;
- QPen mAngularPen, mAngularSubGridPen;
- QPen mRadialPen, mRadialSubGridPen, mRadialZeroLinePen;
-
- QCPPolarAxisAngular *mParentAxis;
- QPointer<QCPPolarAxisRadial> mRadialAxis;
-
- virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
-
- void drawRadialGrid(QCPPainter *painter, const QPointF ¢er, const QVector<double> &coords, const QPen &pen, const QPen &zeroPen=Qt::NoPen);
- void drawAngularGrid(QCPPainter *painter, const QPointF ¢er, double radius, const QVector<QPointF> &ticksCosSin, const QPen &pen);
- private:
- Q_DISABLE_COPY(QCPPolarGrid)
- };
- Q_DECLARE_OPERATORS_FOR_FLAGS(QCPPolarGrid::GridTypes)
- Q_DECLARE_METATYPE(QCPPolarGrid::GridType)
- class QCP_LIB_DECL QCPPolarLegendItem : public QCPAbstractLegendItem
- {
- Q_OBJECT
- public:
- QCPPolarLegendItem(QCPLegend *parent, QCPPolarGraph *graph);
-
- QCPPolarGraph *polarGraph() { return mPolarGraph; }
- protected:
-
- QCPPolarGraph *mPolarGraph;
-
- virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
- virtual QSizeF minimumOuterSizeHint() const Q_DECL_OVERRIDE;
-
- QPen getIconBorderPen() const;
- QColor getTextColor() const;
- QFont getFont() const;
- };
- class QCP_LIB_DECL QCPPolarGraph : public QCPLayerable
- {
- Q_OBJECT
-
-
- public:
-
- enum LineStyle { lsNone
-
- ,lsLine
- };
- Q_ENUMS(LineStyle)
- QCPPolarGraph(QCPPolarAxisAngular *keyAxis, QCPPolarAxisRadial *valueAxis);
- virtual ~QCPPolarGraph();
-
- QString name() const { return mName; }
- bool antialiasedFill() const { return mAntialiasedFill; }
- bool antialiasedScatters() const { return mAntialiasedScatters; }
- QPen pen() const { return mPen; }
- QBrush brush() const { return mBrush; }
- bool periodic() const { return mPeriodic; }
- QCPPolarAxisAngular *keyAxis() const { return mKeyAxis.data(); }
- QCPPolarAxisRadial *valueAxis() const { return mValueAxis.data(); }
- QCP::SelectionType selectable() const { return mSelectable; }
- bool selected() const { return !mSelection.isEmpty(); }
- QCPDataSelection selection() const { return mSelection; }
-
- QSharedPointer<QCPGraphDataContainer> data() const { return mDataContainer; }
- LineStyle lineStyle() const { return mLineStyle; }
- QCPScatterStyle scatterStyle() const { return mScatterStyle; }
-
- void setName(const QString &name);
- void setAntialiasedFill(bool enabled);
- void setAntialiasedScatters(bool enabled);
- void setPen(const QPen &pen);
- void setBrush(const QBrush &brush);
- void setPeriodic(bool enabled);
- void setKeyAxis(QCPPolarAxisAngular *axis);
- void setValueAxis(QCPPolarAxisRadial *axis);
- Q_SLOT void setSelectable(QCP::SelectionType selectable);
- Q_SLOT void setSelection(QCPDataSelection selection);
-
- void setData(QSharedPointer<QCPGraphDataContainer> data);
- void setData(const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
- void setLineStyle(LineStyle ls);
- void setScatterStyle(const QCPScatterStyle &style);
-
- void addData(const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
- void addData(double key, double value);
- void coordsToPixels(double key, double value, double &x, double &y) const;
- const QPointF coordsToPixels(double key, double value) const;
- void pixelsToCoords(double x, double y, double &key, double &value) const;
- void pixelsToCoords(const QPointF &pixelPos, double &key, double &value) const;
- void rescaleAxes(bool onlyEnlarge=false) const;
- void rescaleKeyAxis(bool onlyEnlarge=false) const;
- void rescaleValueAxis(bool onlyEnlarge=false, bool inKeyRange=false) const;
- bool addToLegend(QCPLegend *legend);
- bool addToLegend();
- bool removeFromLegend(QCPLegend *legend) const;
- bool removeFromLegend() const;
-
- virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=nullptr) const;
- virtual QCPPlottableInterface1D *interface1D() { return nullptr; }
- virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const;
- virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const;
- signals:
- void selectionChanged(bool selected);
- void selectionChanged(const QCPDataSelection &selection);
- void selectableChanged(QCP::SelectionType selectable);
- protected:
-
- QSharedPointer<QCPGraphDataContainer> mDataContainer;
- LineStyle mLineStyle;
- QCPScatterStyle mScatterStyle;
- QString mName;
- bool mAntialiasedFill, mAntialiasedScatters;
- QPen mPen;
- QBrush mBrush;
- bool mPeriodic;
- QPointer<QCPPolarAxisAngular> mKeyAxis;
- QPointer<QCPPolarAxisRadial> mValueAxis;
- QCP::SelectionType mSelectable;
- QCPDataSelection mSelection;
-
-
- virtual QRectF clipRect() const;
- virtual void draw(QCPPainter *painter);
- virtual QCP::Interaction selectionCategory() const;
- void applyDefaultAntialiasingHint(QCPPainter *painter) const;
-
- virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged);
- virtual void deselectEvent(bool *selectionStateChanged);
-
- virtual void drawLinePlot(QCPPainter *painter, const QVector<QPointF> &lines) const;
- virtual void drawFill(QCPPainter *painter, QVector<QPointF> *lines) const;
- virtual void drawScatterPlot(QCPPainter *painter, const QVector<QPointF> &scatters, const QCPScatterStyle &style) const;
-
- virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const;
-
- void applyFillAntialiasingHint(QCPPainter *painter) const;
- void applyScattersAntialiasingHint(QCPPainter *painter) const;
- double pointDistance(const QPointF &pixelPoint, QCPGraphDataContainer::const_iterator &closestData) const;
-
- virtual int dataCount() const;
- void getDataSegments(QList<QCPDataRange> &selectedSegments, QList<QCPDataRange> &unselectedSegments) const;
- void drawPolyline(QCPPainter *painter, const QVector<QPointF> &lineData) const;
- void getVisibleDataBounds(QCPGraphDataContainer::const_iterator &begin, QCPGraphDataContainer::const_iterator &end, const QCPDataRange &rangeRestriction) const;
- void getLines(QVector<QPointF> *lines, const QCPDataRange &dataRange) const;
- void getScatters(QVector<QPointF> *scatters, const QCPDataRange &dataRange) const;
- void getOptimizedLineData(QVector<QCPGraphData> *lineData, const QCPGraphDataContainer::const_iterator &begin, const QCPGraphDataContainer::const_iterator &end) const;
- void getOptimizedScatterData(QVector<QCPGraphData> *scatterData, QCPGraphDataContainer::const_iterator begin, QCPGraphDataContainer::const_iterator end) const;
- QVector<QPointF> dataToLines(const QVector<QCPGraphData> &data) const;
- private:
- Q_DISABLE_COPY(QCPPolarGraph)
- friend class QCPPolarLegendItem;
- };
- #endif
|