12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528 |
- import Cocoa
- import KMComponentLibrary
- let MIN_SIDE_PANE_WIDTH: NSNumber = 264
- let CPDFViewIsReadModeKey = "kKMPDFViewIsReadMode"
- let CPDFViewLeftSidePaneWidthKey = "CPDFOfficeLeftSidePaneWidthKey"
- struct KMNMWCFlags {
- var settingUpWindow: Bool = true
- }
- @objcMembers class KMMainViewController: KMBaseViewController, NSTextFieldDelegate {
-
- @IBOutlet var contendBox: NSBox!
-
- @IBOutlet var toolbarBox: NSBox!
-
- @IBOutlet var bottomContendBox: NSBox!
-
- @IBOutlet var sidebarBox: NSBox!
-
- @IBOutlet var infoContendSplitView: KMPDFSplitView!
- @IBOutlet var infoSplitLeftView: NSView!
- @IBOutlet var infoSplitRightView: NSView!
- @IBOutlet var infoSplitCenterView: NSView!
-
- @IBOutlet var pdfSplitView: NSSplitView!
- @IBOutlet var pdfSplitTopView: NSView!
- @IBOutlet var pdfSplitBottomView: NSView!
-
- @IBOutlet var toolbarBoxHeightConst: NSLayoutConstraint!
- @IBOutlet var infoSplitViewLeftConst: NSLayoutConstraint!
- @IBOutlet var infoSplitViewRightConst: NSLayoutConstraint!
-
- var viewManager: KMPDFViewManager = KMPDFViewManager.init()
- var toolbarManager: KMPDFToolbarManager = KMPDFToolbarManager.init()
-
- var listView: CPDFListView = CPDFListView.init()
- var document: CPDFDocument?
- var myDocument: NSDocument?
-
- var isFirstOpen: Bool = true
-
- var insertDocuments: Set<CPDFDocument> = []
-
-
- private var pdfToolbarController: KMPDFToolbarController?
-
-
- private var sideBarController: KMPDFSideBarController?
-
-
- private var pageEditViewController: KMNPageEditViewController?
-
-
- private var displaySettingController: KMNDisplayViewController?
-
-
- private var splitPDFController: KMSplitPDFViewController?
-
- private var pdfBottomToolbar: KMSplitToolbar?
-
-
- var presentationTopViewController: KMPresentationTopViewController?
-
-
- var editToolbarView: KMEditToolbarView?
-
- var watermarkViewController: KMWatermarkController?
-
- var backgroundViewController: KMBackgroundController?
-
- var headerFooterViewController: KMHeaderFooterController?
-
- var batesViewController: KMBatesController?
-
- var cropController: KMCropController?
-
-
- var botaViewController: KMNLeftSideViewController?
-
-
- var rightSideController: KMRightSideController?
-
-
-
- @IBOutlet weak var leftView: NSView!
-
- var model = KMMainModel()
-
-
- var autoFlowOptionsSheetController: KMAutoFlowOptionsSheetController?
-
-
- var searchIndex: Int = 0
-
-
- var formAlertView: KMFormAlertView?
-
- var secureAlertView: KMSecureAlertView?
-
-
- var isCompareModel: Bool = false {
- didSet {
- }
- }
-
- var mergeWindowController: KMMergeWindowController?
-
-
- var passwordWindow: KMPasswordInputWindow?
-
- var compressWIndowControllerNew: KMCompressWIndowControllerNew?
-
- var securityWindowController: KMSecurityWindowController?
-
-
- var guideInfoWindowController: KMGuideInfoWindowController?
-
-
-
- var recommondPopWindowVC: KMRecommondPopWindow?
-
- var removeAllAnnotationsStore = KMPDFViewRemoveAllAnnotationsStore()
-
- private var _needSave = false
- var needSave: Bool {
- set {
- _needSave = newValue
-
- if (_needSave == false) {
- self.clearIsPDFDocumentEdited()
- }
- }
- get {
- return _needSave
- }
- }
-
- var isPDFDocumentEdited: Bool {
- get {
- return self.model.isPDFDocumentEdited
- }
- }
- var newMwcFlags = KMNMWCFlags(settingUpWindow: true)
-
- var leftSideViewController: KMLeftSideViewController = KMLeftSideViewController.init(type: KMLeftMethodMode())
- var searchResults: [KMSearchMode] = []
- var mwcFlags: MwcFlags = MwcFlags()
-
- weak var browserWindowController: KMBrowserWindowController?
-
- var currentWindowController: NSWindowController!
- var savedNormalSetup: NSMutableDictionary = NSMutableDictionary()
-
-
- var digitalSignController: KMPDFDigitalSignViewController?
-
- var redactController: KMPDFRedactViewController!
-
- let CPDFOfficeLeftSidePaneWidthKey = "CPDFOfficeLeftSidePaneWidthKey"
- let CPDFOfficeRightSidePaneWidthKey = "CPDFOfficeRightSidePaneWidthKey"
-
- var extract: KMExtractImageWindowController?
-
- var functionWidth: Double {
- get {
- if self.viewManager.isPDFReadMode {
- if !self.model.isShowBOTA {
- return 0
- }
- }
- return 48-4
- }
- }
-
- var pageNumber: UInt?
-
- var pdfEditController: KMPDFEditViewController? {
- get {
- return self.getPDFEditController()
- }
- }
-
- var autoSaveTimer: Timer?
- private var _documentFirstLoad: Bool = true
-
- var eventMonitor: Any?
- var keyEventMonitor: Any?
- var mouseRightMenuEvent: NSEvent?
-
- lazy private var homeVC: KMNHomeViewController? = {
- let vc = KMNHomeViewController()
- return vc
- }()
-
- fileprivate var _secureOptions: [CPDFDocumentWriteOption : Any]?
- var secureOptions: [CPDFDocumentWriteOption : Any]? {
- get {
- return self._secureOptions
- }
- }
- var documentAttribute: [CPDFDocumentAttribute : Any]?
-
- fileprivate var _removeSecureFlag = false
- var removeSecureFlag: Bool {
- get {
- return self._removeSecureFlag
- }
- }
- fileprivate var _saveWatermarkFlag = false
- var saveWatermarkFlag: Bool {
- get {
- return self._saveWatermarkFlag
- }
- }
-
- private var mainWindow_: NSWindow?
- var mainWindow: NSWindow? {
- get {
- return self.mainWindow_
- }
- set {
- self.mainWindow_ = newValue
- }
- }
-
- var setDocument: CPDFDocument? {
- get {
- return document
- }
- set {
- if document != newValue {
- document = newValue
- }
- listView.document = document
- botaViewController?.changeDocument(document: document)
- }
- }
-
- var setPageNumber: UInt {
- get {
- return pageNumber!
- }
- set {
- let pageCount = listView.document?.pageCount ?? 0
- var value = newValue
- if value > pageCount {
- value = pageCount
- }
- if value > 0 && listView.currentPage().pageIndex() != value-1 {
- listView.go(to: listView.document?.page(at: value-1))
- }
- if pageNumber != value {
- pageNumber = value
- }
- }
- }
-
-
- var distanceMeasureInfoWindowController: CDistanceMeasureInfoWindowController?
- var perimeterMeasureInfoWindowController: CPerimeterMeasureInfoWindowController?
- var areaMeasureInfoWindowController: CAreaMeasureInfoWindowController?
-
- var srHanddler: KMSearchReplaceHanddler = KMSearchReplaceHanddler()
-
-
- deinit {
- NotificationCenter.default.removeObserver(self)
-
- self.listView.delegate = nil
- self.listView.document?.delegate = nil
-
- self.removeEventMonitor()
- self.removeKeyEventMonitor()
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
-
- setupData()
-
- setupUI()
-
- loadUserDefaultsData()
- }
-
- override func viewDidAppear() {
- super.viewDidAppear()
- }
-
-
- func setupUI() {
-
- initPDFView()
-
- initToolbar()
-
- initSideBar()
-
- setUpSplitView()
- }
-
- func setupData() {
- toolbarManager.pdfViewManager = viewManager
-
- if (UserDefaults.standard.object(forKey: CPDFViewLeftSidePaneWidthKey) != nil) {
- UserDefaults.standard.set(MIN_SIDE_PANE_WIDTH, forKey: CPDFViewLeftSidePaneWidthKey)
- UserDefaults.standard.synchronize()
- }
-
- newMwcFlags.settingUpWindow = true
- }
-
-
- private func documentLoadComplete() {
- loadUserDefaultsData()
-
- initLeftSideController()
-
- activityLoadMethod()
-
- let readModel = UserDefaults.standard.bool(forKey: CPDFViewIsReadModeKey)
- if readModel == true {
- self.openPDFReadMode()
- }
-
- toggleCloseLeftSide()
-
- newMwcFlags.settingUpWindow = false
- }
-
-
- private func activityLoadMethod() {
-
- }
-
- private func loadUserDefaultsData() {
- applyLeftSideWidth(0, rightSideWidth: 0)
- }
-
- func applyLeftSideWidth(_ leftSideWidth: CGFloat, rightSideWidth: CGFloat) -> Void {
- infoContendSplitView.setPosition(infoContendSplitView.maxPossiblePositionOfDivider(at: 1) - infoContendSplitView.dividerThickness - rightSideWidth, ofDividerAt: 1)
- infoContendSplitView.setPosition(leftSideWidth, ofDividerAt: 0)
- }
-
-
- func initPDFView() {
- listView.autoresizingMask = [.width, .height]
- listView.autoScales = true
- listView.delegate = self
- listView.pdfListViewDelegate = self
- listView.document = self.document
- reloadPDFSplitInfo()
- }
-
- func updatePDFViewAnnotationMode() {
- let toolbarMode = viewManager.toolMode
- let subToolMode = viewManager.subToolMode
-
- listView.isHidden = false
-
- if toolbarMode == .None {
- listView.annotationType = .unkown
-
- listView.toolMode = .noteToolMode
-
- } else if toolbarMode == .Markup {
-
- listView.toolMode = .noteToolMode
-
- if subToolMode == .None {
- listView.annotationType = .unkown
- } else if subToolMode == .Highlight {
- listView.annotationType = .highlight
-
- } else if subToolMode == .Underline {
- listView.annotationType = .underline
-
- } else if subToolMode == .Waveline {
- listView.annotationType = .squiggly
-
- } else if subToolMode == .Strikethrough {
- listView.annotationType = .strikeOut
-
- } else if subToolMode == .Text {
- listView.annotationType = .freeText
-
- } else if subToolMode == .Note {
- listView.annotationType = .anchored
-
- } else if subToolMode == .Pen {
- listView.annotationType = .ink
-
- } else if subToolMode == .Eraser {
- listView.annotationType = .eraser
-
- } else if subToolMode == .Rectangle {
- listView.annotationType = .square
-
- } else if subToolMode == .Circle {
- listView.annotationType = .circle
-
- } else if subToolMode == .Arrow {
- listView.annotationType = .arrow
-
- } else if subToolMode == .Line {
- listView.annotationType = .line
-
- } else if subToolMode == .Measure {
- listView.toolMode = .measureToolMode
-
- listView.annotationType = .line
-
- } else if subToolMode == .Stamp {
- listView.annotationType = .stamp
-
- } else if subToolMode == .Sign {
- listView.annotationType = .signSignature
-
- }
-
- } else if toolbarMode == .Edit {
-
- if subToolMode == .None {
- if listView.toolMode != .editPDFToolMode {
- listView.toolMode = .editPDFToolMode
- listView.configPDFEditingInfo()
- }
- listView.annotationType = .editTextImage
- listView.setShouAddEdit([])
- listView.change([.text, .image])
-
- } else if subToolMode == .Edit_text {
- if listView.toolMode != .editPDFToolMode {
- listView.toolMode = .editPDFToolMode
- listView.configPDFEditingInfo()
- }
- listView.annotationType = .addText
- listView.setShouAddEdit([.text])
- listView.change(.text)
-
- } else if subToolMode == .Edit_Image {
- if listView.toolMode != .editPDFToolMode {
- listView.toolMode = .editPDFToolMode
- listView.configPDFEditingInfo()
- }
- listView.annotationType = .addImage
- listView.setShouAddEdit([.image])
- listView.change(.image)
-
- } else if subToolMode == .Edit_Link {
- listView.toolMode = .noteToolMode
-
- listView.annotationType = .link
-
- } else if subToolMode == .Edit_Crop {
- listView.isHidden = true
- }
-
- if viewManager.editType == .watermark ||
- viewManager.editType == .background ||
- viewManager.editType == .header_Footer ||
- viewManager.editType == .bates {
- listView.isHidden = true
- }
-
- if subToolMode != .Edit_Crop {
- removeCropController()
- }
-
- } else if toolbarMode == .Form {
-
- listView.toolMode = .formToolMode
- if subToolMode == .None {
- listView.annotationType = .unkown
-
- } else if subToolMode == .Form_text {
- listView.annotationType = .textField
-
- } else if subToolMode == .Form_checkbox {
- listView.annotationType = .checkBox
-
- } else if subToolMode == .Form_radio {
- listView.annotationType = .radioButton
-
- } else if subToolMode == .Form_list {
- listView.annotationType = .listMenu
-
- } else if subToolMode == .Form_dropdown {
- listView.annotationType = .comboBox
-
- } else if subToolMode == .Form_OK {
- listView.annotationType = .actionButton
-
- } else if subToolMode == .Form_digitalSign {
-
- }
-
- } else if toolbarMode == .Fill {
-
- listView.toolMode = .selfSignMode
- if subToolMode == .None {
- } else if subToolMode == .Fill_tick {
- listView.annotationType = .signTure
-
- } else if subToolMode == .fill_fork {
- listView.annotationType = .signFalse
-
- } else if subToolMode == .fill_rectangle {
- listView.annotationType = .signCircle
-
- } else if subToolMode == .fill_line {
- listView.annotationType = .signLine
-
- } else if subToolMode == .fill_dot {
- listView.annotationType = .signDot
-
- } else if subToolMode == .fill_date {
- listView.annotationType = .signDate
-
- } else if subToolMode == .fill_sign {
- listView.annotationType = .signSignature
-
- }
-
- } else if toolbarMode == .Convert {
-
- listView.toolMode = .textToolMode
-
- } else if toolbarMode == .Protect {
-
- listView.toolMode = .textToolMode
-
- } else if toolbarMode == .Tools {
-
- listView.toolMode = .textToolMode
-
- }
-
- }
-
-
- func setUpSplitView() {
- infoContendSplitView.wantsLayer = true
- infoContendSplitView.layer?.backgroundColor = NSColor.clear.cgColor
- infoContendSplitView.delegate = self
- infoContendSplitView.layer?.masksToBounds = true
- }
-
- func setupSplitPDFController() {
- if splitPDFController == nil {
- splitPDFController = KMSplitPDFViewController.init()
- }
- splitPDFController?.view.frame = pdfSplitBottomView.bounds
- splitPDFController?.view.autoresizingMask = [.height, .width]
- splitPDFController?.viewManager = self.viewManager
- splitPDFController?.delegate = self
- splitPDFController?.reloadData()
-
- pdfSplitBottomView.addSubview(splitPDFController!.view)
- }
-
-
- func initToolbar() {
- toolbarBox.borderWidth = 0
-
- if pdfToolbarController == nil {
- pdfToolbarController = KMPDFToolbarController.init()
- }
- pdfToolbarController?.view.frame = toolbarBox.bounds
- pdfToolbarController?.view.autoresizingMask = [.width, .height]
- pdfToolbarController?.delegate = self
- toolbarBox.contentView = pdfToolbarController?.view
-
- pdfToolbarController?.viewManager = viewManager
- pdfToolbarController?.toolbarManager = toolbarManager
- pdfToolbarController?.pdfView = listView
- pdfToolbarController?.setUpData()
-
- refreshToolbarView()
- }
-
- func refreshToolbarView() {
-
- let _manager = viewManager
-
- if _manager.isPageEditMode {
- toolbarBoxHeightConst.constant = 80
- } else if _manager.editType == .watermark || _manager.editType == .background || _manager.editType == .header_Footer || _manager.editType == .bates {
- toolbarBoxHeightConst.constant = 40
- } else if _manager.toolMode == .Markup ||
- _manager.toolMode == .Edit ||
- _manager.toolMode == .Form ||
- _manager.toolMode == .Fill ||
- _manager.toolMode == .Convert ||
- _manager.toolMode == .Protect ||
- _manager.toolMode == .Tools {
-
- toolbarBoxHeightConst.constant = 80
- } else {
- toolbarBoxHeightConst.constant = 40
- }
-
- }
-
- func toolbarViewModeChanged() {
- updatePDFViewAnnotationMode()
-
- if viewManager.showRightSide == true {
- toggleOpenRightSide()
- } else {
- toggleCloseRightSide()
- }
- }
-
-
- func initSideBar() {
- sidebarBox.borderWidth = 0
-
- if sideBarController == nil {
- sideBarController = KMPDFSideBarController.init()
- }
- sideBarController?.view.frame = sidebarBox.bounds
- sideBarController?.view.autoresizingMask = [.width, .height]
- sidebarBox.contentView = sideBarController?.view
-
- sideBarController?.pdfView = listView
- sideBarController?.delegate = self
- sideBarController?.pdfViewManager = viewManager
-
- sideBarController?.reloadData()
- }
-
-
- func initLeftSideController() {
- if botaViewController == nil {
- botaViewController = KMNLeftSideViewController(listView.document)
- }
- botaViewController?.leftSideViewDelegate = self
- botaViewController?.view.frame = infoSplitLeftView.bounds
- botaViewController?.view.autoresizingMask = [.width, .height]
- if botaViewController != nil {
- infoSplitLeftView?.addSubview(botaViewController!.view)
- }
- }
-
- private func leftSidePaneIsOpen() -> Bool {
- return !infoContendSplitView.isSubviewCollapsed(infoSplitLeftView)
- }
-
- private func toggleOpenLeftSide(pdfSideBarType: KMPDFSidebarType) {
- if(leftSidePaneIsOpen() == false) {
- let leftWidthNumber = UserDefaults.standard.object(forKey: CPDFViewLeftSidePaneWidthKey) as? NSNumber ?? MIN_SIDE_PANE_WIDTH
- infoContendSplitView.setPosition(MIN_SIDE_PANE_WIDTH.doubleValue, ofDividerAt: 0)
- }
- if pdfSideBarType == .search {
- botaViewController?.searchViewC.handdler.pdfView = listView
- botaViewController?.leftsideType = .search
- } else if pdfSideBarType == .thumbnail {
- botaViewController?.leftsideType = pdfSideBarType
- KMPrint(" thumbnail")
- } else if pdfSideBarType == .outline {
- botaViewController?.outlineViewC.handdler.pdfView = listView
- botaViewController?.leftsideType = pdfSideBarType
- } else if pdfSideBarType == .bookmark {
- botaViewController?.bookmarkViewC.handdler.pdfView = listView
- botaViewController?.leftsideType = pdfSideBarType
- } else if pdfSideBarType == .annotation {
- KMPrint(" annotation")
- }
- }
-
- private func toggleCloseLeftSide() {
- if(leftSidePaneIsOpen() == true) {
- infoContendSplitView.setPosition(0, ofDividerAt: 0)
- }
- }
-
-
- func initRightSideController() {
- if rightSideController == nil {
- rightSideController = KMRightSideController.init()
- rightSideController?.delegate = self
- }
- rightSideController?.view.frame = CGRectMake(0, 0, MIN_SIDE_PANE_WIDTH.doubleValue, 680)
- rightSideController?.view.autoresizingMask = [.height, .maxXMargin]
- }
-
- func removeRightSideController() {
- rightSideController?.view.removeFromSuperview()
- rightSideController = nil
- }
-
- @objc func toggleOpenRightSide() -> Void {
- initRightSideController()
-
- rightSideController?.view.frame = infoSplitRightView.bounds
- rightSideController?.view.autoresizingMask = [.width, .height]
- infoSplitRightView.addSubview(rightSideController!.view)
- infoContendSplitView.setPosition(CGRectGetWidth(view.frame)-MIN_SIDE_PANE_WIDTH.doubleValue, ofDividerAt: 1)
-
- rightSideController?.viewManager = self.viewManager
-
- rightSideController?.reloadDataWithPDFView(pdfView: listView)
- }
-
- @objc func toggleCloseRightSide() -> Void {
- removeRightSideController()
- infoContendSplitView.setPosition(CGRectGetWidth(view.frame), ofDividerAt: 1)
- }
-
-
- func updatePDFDisplaySettingView() {
-
- if viewManager.showDisplayView {
- infoSplitViewLeftConst.constant = MIN_SIDE_PANE_WIDTH.doubleValue
- } else {
- infoSplitViewLeftConst.constant = 44
- }
-
- if viewManager.showDisplayView {
- if displaySettingController == nil {
- displaySettingController = KMNDisplayViewController.init()
- }
- displaySettingController?.view.frame = CGRectMake(0, 0, MIN_SIDE_PANE_WIDTH.doubleValue, CGRectGetHeight(bottomContendBox.frame))
- displaySettingController?.view.autoresizingMask = [.height, .maxXMargin]
- bottomContendBox.addSubview(displaySettingController!.view)
- displaySettingController?.pdfView = self.listView
- displaySettingController?.viewManager = self.viewManager
- displaySettingController?.delegate = self
-
- displaySettingController?.reloadData()
-
- } else {
- displaySettingController?.view.removeFromSuperview()
- displaySettingController = nil
- }
- }
-
-
- func enterPageEditMode() {
- pageEditViewController = KMNPageEditViewController(self.document)
- if(pageEditViewController != nil) {
- bottomContendBox.addSubview(pageEditViewController!.view)
- pageEditViewController?.view.frame = bottomContendBox.bounds
- pageEditViewController?.thumbnailBaseViewDelegate = self
- pageEditViewController?.selectionIndexPaths = [IndexPath(item: listView.currentPageIndex, section: 0)]
- pageEditViewController?.view.autoresizingMask = [.width,.height]
- pageEditViewController?.currentUndoManager = listView.undoManager
- toolbarManager.page_pageInfo_Property.text = String(listView.currentPageIndex + 1)
- pdfToolbarController?.refreshSecondToolbarItemsState()
-
- }
- }
-
- func exitPageEditMode() {
- if pageEditViewController != nil {
- pageEditViewController?.view.removeFromSuperview()
- pageEditViewController = nil
- }
- }
-
-
- func openPDFReadMode() {
- if viewManager.showDisplayView {
- viewManager.showDisplayView = false
- pdfToolbarController?.reloadLeftIconView()
-
- updatePDFDisplaySettingView()
- }
- infoSplitViewLeftConst.constant = 0
- toolbarBoxHeightConst.constant = 0
-
- view.window?.makeFirstResponder(listView)
-
- var readModeMessage: ComponentMessage = ComponentMessage()
- readModeMessage.properties = ComponentMessageProperty(messageType: .normal_custom, title: KMLocalizedString("Read Mode On"))
- readModeMessage.frame = CGRectMake((CGRectGetWidth(self.view.frame) - readModeMessage.properties.propertyInfo.viewWidth)/2,
- CGRectGetHeight(self.view.frame) - readModeMessage.properties.propertyInfo.viewHeight - 8,
- readModeMessage.properties.propertyInfo.viewWidth,
- readModeMessage.properties.propertyInfo.viewHeight)
- readModeMessage.reloadData()
- readModeMessage.show(inView: self.view, autoHideSeconde: 2)
-
- }
-
- func exitPDFReadMode() {
- viewManager.isPDFReadMode = false
-
- updatePDFDisplaySettingView()
-
- refreshToolbarView()
-
- }
-
-
- func togglePresentation(_ sender: Any?) {
- if self.canExitPresentation() {
- exitFullScreen()
- } else if self.canEnterPresentation() {
- NotificationCenter.default.addObserver(self, selector: #selector(willEnterInteractionModeNotification), name: NSWindow.willEnterInteractionModeNotification, object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(didEnterInteractionModeNotification), name: NSWindow.didEnterInteractionModeNotification, object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(willShowFullScreenNotification), name: NSWindow.willShowFullScreenNotification, object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(didShowFullScreenNotification), name: NSWindow.didShowFullScreenNotification, object: nil)
-
- view.window?.enterPresentation(provider: self)
- }
- }
-
- func enterPresentationMode() {
- let scrollView = listView.documentView().enclosingScrollView
- savedNormalSetup.setValue(scrollView?.hasHorizontalScroller, forKey: KMMainModel.Key.kHasHorizontalScroller)
- savedNormalSetup.setValue(scrollView?.hasVerticalScroller, forKey: KMMainModel.Key.kHasVerticalsCroller)
- savedNormalSetup.setValue(scrollView?.autohidesScrollers, forKey: KMMainModel.Key.kAutoHidesScrollers)
-
- listView.backgroundColor = NSColor.clear
- listView.setDisplay(.singlePage)
- listView.autoScales = true
- listView.displayBox = .cropBox
- listView.displaysPageBreaks = false
- scrollView?.autohidesScrollers = true
- scrollView?.hasHorizontalScroller = false
- scrollView?.hasVerticalScroller = false
-
- listView.setCurrentSelection(nil, animate: true)
- }
-
- func exitPresentationMode() {
-
- NotificationCenter.default.removeObserver(self, name: NSWindow.willEnterInteractionModeNotification, object: nil)
- NotificationCenter.default.removeObserver(self, name: NSWindow.didEnterInteractionModeNotification, object: nil)
- NotificationCenter.default.removeObserver(self, name: NSWindow.willShowFullScreenNotification, object: nil)
- NotificationCenter.default.removeObserver(self, name: NSWindow.willShowFullScreenNotification, object: nil)
-
- }
-
- func exitFullScreen() {
- if self.canExitPresentation() == true {
- let mainDocument = self.myDocument as? KMMainDocument
- let browserWindowController = mainDocument?.browser?.windowController as? KMBrowserWindowController
- browserWindowController?.exitFullscreen()
-
- }
- }
-
- func exitFullscreenMode() {
- if self.interactionMode == .presentation {
- self.exitPresentationMode()
- }
-
- self.applyPDFSettings(self.savedNormalSetup)
- self.savedNormalSetup.removeAllObjects()
-
- listView.layoutDocumentView()
- listView.requiresDisplay()
-
- if let backgroundColor = UserDefaults.standard.color(forKey: KMBackgroundColorKey) {
- listView.backgroundColor = backgroundColor
- }
- }
-
- func applyPDFSettings(_ setup: NSDictionary) {
- if let data = setup.object(forKey: KMMainModel.Key.kAutoScales) as? NSNumber {
- self.listView.autoScales = data.boolValue
- }
- if self.listView.autoScales == false {
- if let data = setup.object(forKey: KMMainModel.Key.kScaleFactor) as? NSNumber {
- self.listView.scaleFactor = data.floatValue.cgFloat
- }
- }
-
- if let data = setup.object(forKey: KMMainModel.Key.kDisplayMode) as? NSNumber {
- self.listView.setDisplay(CPDFDisplayViewMode(rawValue: data.intValue) ?? .singlePage)
- }
-
- if let data = setup.object(forKey: KMMainModel.Key.kDisplaysAsBook) as? NSNumber {
- self.listView.displaysAsBook = data.boolValue
- }
-
- if let data = setup.object(forKey: KMMainModel.Key.kDisplaysPageBreaks) as? NSNumber {
- self.listView.displaysPageBreaks = data.boolValue
- }
-
- if let data = setup.object(forKey: KMMainModel.Key.kDisplayBox) as? NSNumber {
-
- }
-
- self.listView.layoutDocumentView()
- }
-
- func currentPDFSettings() -> NSDictionary {
- let setup = NSMutableDictionary()
- setup[KMMainModel.Key.kDisplaysPageBreaks] = NSNumber(value: listView.displaysPageBreaks)
- setup[KMMainModel.Key.kDisplaysAsBook] = NSNumber(value: listView.displaysAsBook)
- setup[KMMainModel.Key.kDisplayBox] = NSNumber(value: listView.displayBox.rawValue)
- setup[KMMainModel.Key.kScaleFactor] = NSNumber(value: listView.scaleFactor)
- setup[KMMainModel.Key.kAutoScales] = NSNumber(value: listView.autoScales)
- setup[KMMainModel.Key.kDisplayMode] = NSNumber(value: listView.fetchDisplayViewMode().rawValue)
-
- return setup
- }
-
- func canEnterFullscreen() -> Bool {
- if (mwcFlags.isSwitchingFullScreen != 0) {
- return false
- }
- if useNativeFullScreen() {
- return interactionMode == .normal || interactionMode == .presentation
- } else {
- return !self.listView.document.isLocked && (interactionMode == .normal || interactionMode == .presentation) && self.view.window?.tabbedWindows?.count ?? 0 < 2
- }
- }
-
- override func canEnterPresentation() -> Bool {
- let can = super.canEnterPresentation()
- if can == false {
- return false
- }
- guard let doc = self.listView.document, doc.isLocked == false else {
- return false
- }
- return can
- }
-
- func fadeOutFullScreenWindow() {
- guard let fullScreenWindow = self.view.window as? KMFullScreenWindow else {
- NSSound.beep()
- return
- }
-
- let mainWindow = fullScreenWindow.interactionParent
- let collectionBehavior = mainWindow?.collectionBehavior
-
- mainWindow?.alphaValue = 0
- if let data = mainWindow?.responds(to: NSSelectorFromString("setAnimationBehavior:")), data {
- mainWindow?.animationBehavior = .none
- }
-
- fullScreenWindow.addChildWindow(mainWindow!, ordered: .below)
- fullScreenWindow.removeChildWindow(mainWindow!)
- fullScreenWindow.level = .popUpMenu
-
- mainWindow?.level = .normal
- mainWindow?.alphaValue = 1.0
- mainWindow?.collectionBehavior = collectionBehavior!
- mainWindow?.display()
- mainWindow?.makeFirstResponder(self.listView)
- mainWindow?.recalculateKeyViewLoop()
-
- mainWindow?.makeKey()
-
- if let data = mainWindow?.responds(to: NSSelectorFromString("setAnimationBehavior:")), data {
- mainWindow?.animationBehavior = .default
- }
- NSApp.removeWindowsItem(fullScreenWindow)
- fullScreenWindow.fadeOut()
- }
-
-
- func reloadPDFSplitInfo() {
- if listView.viewSplitMode == .disable {
- pdfSplitView.isHidden = true
- listView.frame = infoSplitCenterView.bounds
- infoSplitCenterView.addSubview(listView)
-
- if splitPDFController != nil {
- splitPDFController = nil
- }
- } else {
- pdfSplitView.isHidden = false
- listView.frame = pdfSplitTopView.bounds
- pdfSplitTopView.addSubview(listView)
-
- setUpPDFBottomToolbar()
-
- setupSplitPDFController()
-
- if listView.viewSplitMode == .horizontal {
- pdfSplitView.isVertical = false
- } else if listView.viewSplitMode == .vertical {
- pdfSplitView.isVertical = true
- }
- }
- }
-
- func setUpPDFBottomToolbar() {
- if pdfBottomToolbar != nil {
- pdfBottomToolbar = nil
- }
- pdfBottomToolbar = KMSplitToolbar.init()
- pdfBottomToolbar?.frame = CGRectMake(CGRectGetWidth(pdfSplitTopView.frame)/2-144, 20, 288, 40)
- pdfBottomToolbar?.pdfView = self.listView
- pdfBottomToolbar?.reloadData()
-
- pdfSplitTopView.addSubview(pdfBottomToolbar!)
- }
-
- func reloadPDFBottomToolbar() {
- if viewManager.splitShowBottomBar {
- pdfBottomToolbar?.isHidden = false
- pdfBottomToolbar?.reloadData()
- } else {
- pdfBottomToolbar?.isHidden = true
- }
- }
-
- func showEditToolbarView() {
- if editToolbarView == nil {
- editToolbarView = KMEditToolbarView()
- }
- editToolbarView?.frame = toolbarBox.bounds
- editToolbarView?.delegate = self
- editToolbarView?.autoresizingMask = [.width, .height]
- toolbarBox.contentView = editToolbarView
- }
-
- func exitEditToolbarView() {
- viewManager.editType = .none
- viewManager.subToolMode = .None
-
- editToolbarView?.removeFromSuperview()
- editToolbarView = nil
-
- watermarkViewController?.view.removeFromSuperview()
- watermarkViewController = nil
-
- backgroundViewController?.view.removeFromSuperview()
- backgroundViewController = nil
-
- headerFooterViewController?.view.removeFromSuperview()
- headerFooterViewController = nil
-
- batesViewController?.view.removeFromSuperview()
- batesViewController = nil
-
- refreshToolbarView()
- toolbarBox.contentView = pdfToolbarController?.view
-
- updatePDFViewAnnotationMode()
- }
-
- func updateEditModeDocumentWhenPageChanged() {
- if viewManager.editType == .watermark {
- updateWatermarkDocument()
- } else if viewManager.editType == .background {
- updateBackgroundDocument()
- } else if viewManager.editType == .header_Footer {
- updateHeaderFooterDocument()
- } else if viewManager.editType == .bates {
- updateBatesDocument()
- } else if viewManager.subToolMode == .Edit_Crop {
- updateCropDocument()
- }
- }
-
-
- func showCropController() {
- if cropController == nil {
- cropController = KMCropController.init()
-
- cropController?.view.frame = infoSplitCenterView.bounds
- cropController?.view.autoresizingMask = [.width, .height]
- cropController?.delegate = self
- infoSplitCenterView.addSubview(cropController!.view)
-
- updateCropDocument()
-
- if viewManager.showRightSide == false {
- viewManager.showRightSide = true
- pdfToolbarController?.reloadRightToolsView()
-
- toggleOpenRightSide()
- }
- }
- }
-
- func updateCropDocument() {
-
- guard let controller = cropController else { return }
-
- controller.pdfDocument = nil
-
- let page = listView.document.page(at: UInt(listView.currentPageIndex))
-
- let editDocument = CPDFDocument.init()
- editDocument?.insertPageObject(page, at: 0)
- if let editPage = editDocument?.page(at: 0) {
- editPage.setBounds(CGRectMake(0, 0, editPage.bounds(for: .mediaBox).size.width, editPage.bounds(for: .mediaBox).size.height), for: .cropBox)
- controller.selectionRect = page?.bounds(for: .cropBox) ?? .zero
- }
- controller.pdfDocument = editDocument
- controller.reloadData()
-
- }
-
- func removeCropController() {
- if cropController != nil {
- cropController?.view.removeFromSuperview()
- cropController = nil
-
- if viewManager.subToolMode == .None {
- viewManager.showRightSide = false
- pdfToolbarController?.reloadRightToolsView()
-
- toggleCloseRightSide()
- }
- }
-
- }
-
-
- func showWatermarkController() {
- viewManager.editType = .watermark
-
- showEditToolbarView()
- editToolbarView?.editType = .watermark
- if KMWatermarkManager.defaultManager.watermarks.count == 0 {
- editToolbarView?.editSubType = .add
- } else {
- editToolbarView?.editSubType = .template
- }
- editToolbarView?.reloadData()
-
- if watermarkViewController == nil {
- watermarkViewController = KMWatermarkController.init()
- }
- watermarkViewController?.view.frame = CGRectMake(44, 0, CGRectGetWidth(bottomContendBox.frame)-44, CGRectGetHeight(bottomContendBox.frame))
- watermarkViewController?.view.autoresizingMask = [.maxXMargin, .width, .height]
- watermarkViewController?.delegate = self
- bottomContendBox.contentView?.addSubview(watermarkViewController!.view)
-
- watermarkViewController?.editSubType = editToolbarView?.editSubType ?? .template
-
- updateWatermarkDocument()
- }
-
- func updateWatermarkDocument() {
-
- guard let controller = watermarkViewController else { return }
-
- var editDocument = CPDFDocument.init()
- if let vcDoc = controller.pdfDocument {
- editDocument = vcDoc
- }
-
- let page = listView.document.page(at: UInt(listView.currentPageIndex))
- editDocument?.insertPageObject(page, at: 0)
- if editDocument?.pageCount == 2 {
- let theIndex = IndexSet(integer: 1)
- editDocument?.removePage(at: theIndex)
- }
- if watermarkViewController?.pdfDocument == nil {
- watermarkViewController?.pdfDocument = editDocument
- }
- watermarkViewController?.resetUI()
- watermarkViewController?.reloadData()
-
- }
-
-
- func removePDFWatermark() {
- let watermarks = self.listView.document.watermarks()
- if (watermarks == nil || watermarks!.count <= 0) {
- let alert = NSAlert()
- alert.alertStyle = .warning
- alert.messageText = NSLocalizedString("Could not find a removable watermark in this document. If you see a watermark, it was not added with PDF Reader Pro and therefore cannot be detected.", comment: "")
- alert.addButton(withTitle: NSLocalizedString("Confirm", comment: ""))
- alert.runModal()
- return
- }
-
- let alert = NSAlert()
- alert.alertStyle = .warning
- alert.messageText = NSLocalizedString("Are you sure you want to remove the watermark?", comment: "")
- alert.addButton(withTitle: NSLocalizedString("Delete", comment: ""))
- alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
- let result = alert.runModal()
- if (result == .alertFirstButtonReturn) {
- for watermark in watermarks! {
- listView.document.removeWatermark(watermark)
- }
- listView.layoutDocumentView()
-
- _ = KMNCustomAlertView.alertView(message: KMLocalizedString("Watermark removed"),
- type: .success,
- fromView: bottomContendBox,
- point:CGPointMake(CGRectGetWidth(bottomContendBox.frame)/2, CGRectGetHeight(bottomContendBox.frame)-28))
-
- }
- }
-
- func batchAddWatermark() {
-
- }
-
- func batchRemoveWatermark() {
-
- }
-
-
- func showBackgroundController() {
-
- viewManager.editType = .background
-
- showEditToolbarView()
- editToolbarView?.editType = .background
- if KMBackgroundManager.defaultManager.datas.count == 0 {
- editToolbarView?.editSubType = .add
- } else {
- editToolbarView?.editSubType = .template
- }
- editToolbarView?.reloadData()
-
- if backgroundViewController == nil {
- backgroundViewController = KMBackgroundController.init()
- }
- backgroundViewController?.view.frame = CGRectMake(44, 0, CGRectGetWidth(bottomContendBox.frame)-44, CGRectGetHeight(bottomContendBox.frame))
- backgroundViewController?.view.autoresizingMask = [.maxXMargin, .width, .height]
- backgroundViewController?.delegate = self
- bottomContendBox.contentView?.addSubview(backgroundViewController!.view)
- backgroundViewController?.editSubType = editToolbarView?.editSubType ?? .template
- backgroundViewController?.resetUI()
-
- updateBackgroundDocument()
- }
-
- func updateBackgroundDocument() {
- guard let controller = backgroundViewController else { return }
-
- controller.pdfDocument = nil
-
- let editDocument = CPDFDocument.init()
-
- let page = listView.document.page(at: UInt(listView.currentPageIndex))
- editDocument?.insertPageObject(page, at: 0)
-
- backgroundViewController?.pdfDocument = editDocument
- backgroundViewController?.reloadData()
-
- }
-
- func removePDFBackground() {
- let alert = NSAlert()
- alert.alertStyle = .warning
- alert.messageText = NSLocalizedString("Are you sure you want to remove the background?", comment: "")
- alert.addButton(withTitle: NSLocalizedString("Delete", comment: ""))
- alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
- let result = alert.runModal()
- if (result == .alertFirstButtonReturn) {
- let background = listView.document.background()
- background?.clear()
-
- listView.document?.refreshPageData()
- listView.layoutDocumentView()
-
- _ = KMNCustomAlertView.alertView(message: KMLocalizedString("Background removed"),
- type: .success,
- fromView: bottomContendBox,
- point:CGPointMake(CGRectGetWidth(bottomContendBox.frame)/2, CGRectGetHeight(bottomContendBox.frame)-28))
-
- }
- }
-
- func batchAddBackground() {
-
- }
-
- func batchRemoveBackground() {
-
- }
-
-
- func showHeaderFooterController() {
-
- viewManager.editType = .header_Footer
-
- showEditToolbarView()
- editToolbarView?.editType = .header_Footer
- if KMHeaderFooterManager.defaultManager.headFooterObjects.count == 0 {
- editToolbarView?.editSubType = .add
- } else {
- editToolbarView?.editSubType = .template
- }
- editToolbarView?.reloadData()
-
- if headerFooterViewController == nil {
- headerFooterViewController = KMHeaderFooterController.init()
- }
- headerFooterViewController?.view.frame = CGRectMake(44, 0, CGRectGetWidth(bottomContendBox.frame)-44, CGRectGetHeight(bottomContendBox.frame))
- headerFooterViewController?.view.autoresizingMask = [.maxXMargin, .width, .height]
- headerFooterViewController?.totalPDFCount = Int(listView.document.pageCount)
- headerFooterViewController?.delegate = self
- bottomContendBox.contentView?.addSubview(headerFooterViewController!.view)
- headerFooterViewController?.editSubType = editToolbarView?.editSubType ?? .template
-
- updateHeaderFooterDocument()
- }
-
- func updateHeaderFooterDocument() {
- guard let controller = headerFooterViewController else { return }
- controller.pdfDocument = nil
-
- let editDocument = CPDFDocument.init()
- let page = listView.document.page(at: UInt(listView.currentPageIndex))
- editDocument?.insertPageObject(page, at: 0)
-
- headerFooterViewController?.totalPDFCount = Int(listView.document.pageCount)
- headerFooterViewController?.pdfDocument = editDocument
- headerFooterViewController?.resetUI()
- headerFooterViewController?.reloadData()
-
- }
-
- func removeHeaderFooter() {
-
- let alert = NSAlert()
- alert.alertStyle = .warning
- alert.messageText = NSLocalizedString("Are you sure you want to remove the Header & Footer?", comment: "")
- alert.addButton(withTitle: NSLocalizedString("Delete", comment: ""))
- alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
- let result = alert.runModal()
- if (result == .alertFirstButtonReturn) {
- let headerFooter = listView.document.headerFooter()
- headerFooter?.clear()
-
- listView.document?.refreshPageData()
- listView.layoutDocumentView()
-
- _ = KMNCustomAlertView.alertView(message: KMLocalizedString("Header & Footer removed"),
- type: .success,
- fromView: bottomContendBox,
- point:CGPointMake(CGRectGetWidth(bottomContendBox.frame)/2, CGRectGetHeight(bottomContendBox.frame)-28))
-
- }
-
- }
-
- func batchAddHeaderFooter() {
-
- }
-
- func batchRemoveHeaderFooter() {
-
- }
-
-
- func showBatesController() {
-
- viewManager.editType = .bates
-
- showEditToolbarView()
- editToolbarView?.editType = viewManager.editType
- if KMBatesManager.defaultManager.datas.count == 0 {
- editToolbarView?.editSubType = .add
- } else {
- editToolbarView?.editSubType = .template
- }
- editToolbarView?.reloadData()
-
- if batesViewController == nil {
- batesViewController = KMBatesController.init()
- }
- batesViewController?.view.frame = CGRectMake(44, 0, CGRectGetWidth(bottomContendBox.frame)-44, CGRectGetHeight(bottomContendBox.frame))
- batesViewController?.view.autoresizingMask = [.maxXMargin, .width, .height]
- batesViewController?.delegate = self
- batesViewController?.totalPDFCount = Int(listView.document.pageCount)
- bottomContendBox.contentView?.addSubview(batesViewController!.view)
- batesViewController?.editSubType = editToolbarView?.editSubType ?? .template
-
- updateBatesDocument()
-
- batesViewController?.resetUI()
- }
-
- func updateBatesDocument() {
- guard let controller = batesViewController else { return }
-
- controller.pdfDocument = nil
-
- let editDocument = CPDFDocument.init()
-
- let page = listView.document.page(at: UInt(listView.currentPageIndex))
- editDocument?.insertPageObject(page, at: 0)
-
- batesViewController?.pdfDocument = editDocument
- batesViewController?.reloadData()
-
- }
-
- func removePDFBates() {
- let alert = NSAlert()
- alert.alertStyle = .warning
- alert.messageText = NSLocalizedString("Are you sure you want to remove the Bates?", comment: "")
- alert.addButton(withTitle: NSLocalizedString("Delete", comment: ""))
- alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
- let result = alert.runModal()
- if (result == .alertFirstButtonReturn) {
- let bates = listView.document.bates()
- bates?.clear()
-
- listView.document?.refreshPageData()
- listView.layoutDocumentView()
-
- _ = KMNCustomAlertView.alertView(message: KMLocalizedString("Bates removed"),
- type: .success,
- fromView: bottomContendBox,
- point:CGPointMake(CGRectGetWidth(bottomContendBox.frame)/2, CGRectGetHeight(bottomContendBox.frame)-28))
-
- }
-
- }
-
- func batchAddBates() {
-
- }
-
- func batchRemoveBates() {
-
- }
-
-
-
-
- @objc func auto_cropPagesWhiteMargin(_ pageIndexs: [UInt]) {
- var size = NSZeroSize
- for i in pageIndexs {
- let page = self.listView.document.page(at: i)
- let rect = KMCropTools.getPageForegroundBox(page!)
- size.width = fmax(size.width, NSWidth(rect))
- size.height = fmax(size.height, NSHeight(rect))
- }
-
- var rectArray: Array<NSRect> = []
- for i in pageIndexs {
- progressC?.increment(by: Double(i))
- progressC?.doubleValue = Double(i)
- let page = self.listView.document.page(at: i)
- var rect = KMCropTools.getPageForegroundBox(page!)
- let bounds: NSRect = (page?.bounds(for: .mediaBox))!
- if (rect.minX - bounds.minX > bounds.maxX-rect.maxX) {
- rect.origin.x = rect.maxX-size.width
- }
-
- rect.origin.y = rect.maxY-size.height
- rect.size = size
-
- if (NSWidth(rect) > NSWidth(bounds)) {
- rect.size.width = NSWidth(bounds)
- }
- if (NSHeight(rect) > NSHeight(bounds)) {
- rect.size.height = NSHeight(bounds)
- }
-
- if (NSMinX(rect) < NSMinX(bounds)) {
- rect.origin.x = NSMinX(bounds)
- } else if (NSMaxX(rect) > NSMaxX(bounds)) {
- rect.origin.x = NSMaxX(bounds) - NSWidth(rect)
- }
-
- if (NSMinY(rect) < NSMinY(bounds)) {
- rect.origin.y = NSMinY(bounds)
- } else if (NSMaxY(rect) > NSMaxY(bounds)) {
- rect.origin.y = NSMaxY(bounds) - NSHeight(rect)
- }
-
- rectArray.append(rect)
- }
- self.cropPages(atIndexs: pageIndexs, to: rectArray)
-
- }
-
- func cropPages(atIndexs pageIndexs: [UInt], to rects: Array<NSRect>) {
- let currentPage = self.listView.currentPage()
- let visibleRect: NSRect = self.listView.convert(self.listView.convert(self.listView.documentView().visibleRect, from: self.listView.documentView()), to: self.listView.currentPage())
-
- var oldRectArray: Array<NSRect> = []
- let rectCount = rects.count
- for i in pageIndexs {
- if let page = self.listView.document.page(at: i) {
- let rect = NSIntersectionRect(rects[Int(i) % rectCount], (page.bounds(for: .mediaBox)))
- let oldRect = page.bounds(for: .cropBox)
- oldRectArray.append(oldRect)
-
- page.setBounds(rect, for: .cropBox)
- }
- }
-
- let undoManager = self.listView.undoManager
- (undoManager?.prepare(withInvocationTarget: self) as AnyObject).cropPages(atIndexs: pageIndexs, to: oldRectArray)
-
-
- self.listView.layoutDocumentView()
-
- self.listView.displayBox = .cropBox
-
- self.listView.go(to: currentPage)
- self.listView.go(to: visibleRect, on: currentPage)
-
- }
-
-
-
- @objc private func shareDocument(sender: NSView) {
- let document = self.listView.document ?? CPDFDocument()
- if document?.documentURL == nil {
- return
- }
- var doucumentURL : URL = self.listView.document.documentURL
- if doucumentURL.path.count > 0 {
- let docDir = NSTemporaryDirectory()
- let documentName : String = doucumentURL.path.lastPathComponent
- let path = docDir.stringByAppendingPathComponent(documentName)
- let writeSuccess = self.listView.document.write(to: URL(fileURLWithPath: path))
- if writeSuccess == false {
- __NSBeep()
- return;
- }
- doucumentURL = URL(fileURLWithPath: path)
- }
- let array = [doucumentURL]
- let picker = NSSharingServicePicker.init(items: array)
- if sender.window != nil {
- picker.show(relativeTo: sender.bounds, of: sender, preferredEdge: NSRectEdge.minY)
- } else {
- picker.show(relativeTo: NSRect(x: (self.view.window?.contentView?.frame.size.width)!, y: (self.view.window?.contentView?.frame.size.height ?? 0)-8, width: 0, height: 0), of: self.view.window?.contentView ?? NSView(), preferredEdge: NSRectEdge.minY)
- }
- }
-
- @objc private func shareFlatten(sender: NSView) {
- let document = self.listView.document ?? CPDFDocument()
- var path: String?
- if document?.documentURL != nil {
- path = document?.documentURL.path ?? ""
- }
- if path?.count ?? 0 > 0 {
- let docDir = NSTemporaryDirectory()
- let documentName : String = path?.lastPathComponent ?? ""
- path = docDir.stringByAppendingPathComponent(documentName)
- }
- let pathFolder = path?.fileURL.deletingLastPathComponent().path
- var tfileName = path?.deletingPathExtension.lastPathComponent
- let tStdFileSuffix = "_flatten"
- tfileName = (tfileName ?? "") + tStdFileSuffix + ".pdf"
- path = (pathFolder ?? "") + "/" + (tfileName ?? "")
- let success : Bool = document?.writeFlatten(to: URL(fileURLWithPath: path ?? "")) ?? false
- if success {
- let url = URL(fileURLWithPath: path ?? "")
- let picker = NSSharingServicePicker.init(items: [url])
- if sender.window != nil {
- picker.show(relativeTo: sender.bounds, of: sender, preferredEdge: NSRectEdge.minY)
- } else {
- picker.show(relativeTo: NSRect(x: (self.view.window?.contentView?.frame.size.width)!, y: (self.view.window?.contentView?.frame.size.height ?? 0)-8, width: 0, height: 0), of: self.view.window?.contentView ?? NSView(), preferredEdge: NSRectEdge.minY)
- }
- }
- }
-
- @objc private func shareOriginalPDF(sender: NSView) {
- guard let pdfDoc = self.listView.document else {
- NSSound.beep()
- return
- }
- if !pdfDoc.allowsCopying || !pdfDoc.allowsPrinting {
- let alert = NSAlert()
- alert.alertStyle = .critical
- alert.messageText = NSLocalizedString("This is a secured document. Editing is not permitted.", comment: "")
- alert.runModal()
- return
- }
-
- let document = self.listView.document ?? CPDFDocument()
- var path: String?
- if document?.documentURL != nil {
- path = document?.documentURL.path ?? ""
- }
- if path?.count ?? 0 > 0 {
- let docDir = NSTemporaryDirectory()
- let documentName : String = path?.lastPathComponent ?? ""
- path = docDir.stringByAppendingPathComponent(documentName)
- }
- var writeSuccess = document?.write(to: URL(fileURLWithPath: path ?? ""))
- if writeSuccess == false {
- __NSBeep()
- return;
- }
- let newDocument = CPDFDocument(url: URL(fileURLWithPath: path ?? ""))
-
- let cnt = newDocument?.pageCount ?? 0
- for i in 0 ..< cnt {
- let page = newDocument!.page(at: i)
- var annotations : [CPDFAnnotation] = []
- for annotation in page!.annotations {
- annotations.append(annotation)
- }
- for annotation in annotations {
- annotation.page.removeAnnotation(annotation)
- }
- }
- writeSuccess = newDocument?.write(to:URL(fileURLWithPath: path ?? ""))
- if writeSuccess ?? false {
- let url = URL(fileURLWithPath: path ?? "")
- let picker = NSSharingServicePicker.init(items: [url])
- if sender.window != nil {
- picker.show(relativeTo: sender.bounds, of: sender, preferredEdge: NSRectEdge.minY)
- } else {
- picker.show(relativeTo: NSRect(x: (self.view.window?.contentView?.frame.size.width)!, y: (self.view.window?.contentView?.frame.size.height ?? 0)-8, width: 0, height: 0), of: self.view.window?.contentView ?? NSView(), preferredEdge: NSRectEdge.minY)
- }
- }
- }
-
- @objc func shareFromService(sender: NSMenuItem) {
- if ((NSApp.mainWindow?.windowController is KMBrowserWindowController) == false) {
- return
- }
-
- var string = ""
- if let freeTextAnnotation = listView.activeAnnotation as? CPDFFreeTextAnnotation {
- string = freeTextAnnotation.contents ?? ""
- } else if let markupAnnotation = listView.activeAnnotation as? CPDFMarkupAnnotation {
- if let page = markupAnnotation.page {
- if let selection = page.selection(for: markupAnnotation.bounds) {
- string = selection.string() ?? ""
- }
- }
- } else {
- string = listView.currentSelection?.string() ?? ""
- }
-
- let windowControler = NSApp.mainWindow?.windowController as! KMBrowserWindowController
- let model = windowControler.browser?.tabStripModel
- if let cnt = model?.count(), cnt <= 0 {
- return
- }
-
- if let data = model?.activeTabContents().isHome, data {
- return
- }
-
- let document: KMMainDocument = model?.activeTabContents() as! KMMainDocument
- if string.count > 0 {
- let represent : NSSharingService = sender.representedObject as! NSSharingService
- represent.perform(withItems: [string])
- return
- }
-
- let represent = sender.representedObject as? NSSharingService
- represent?.perform(withItems: [string])
- }
-
-
-
- func showSearchPopWindow(type: KMNBotaSearchType) {
- if type == .search {
- self.view.window?.makeFirstResponder(nil)
- let winC = KMSearchReplaceWindowController(with: listView, type: .search)
- self.currentWindowController = winC
- winC.replaceCallback = { [weak self] in
- let toolMode = self?.listView.toolMode ?? .none
- let isEditing = self?.listView.isEditing() ?? false
- if toolMode == .editPDFToolMode && isEditing {
-
- } else {
- }
- }
- winC.itemClick = { idx, _ in
- if idx == 1 {
- self.toggleOpenLeftSide(pdfSideBarType: .search)
- }
- }
- let targetView = self.pdfToolbarController?.leftViewButton
- let point = targetView?.convert(targetView?.frame.origin ?? .zero, to: nil) ?? .zero
-
- let x = point.x + (self.view.window?.frame.origin.x ?? 0) - 32
- let y = point.y + (self.view.window?.frame.origin.y ?? 0) - 112 - 32
-
- let winFramePoint = NSPoint(x: x, y: y)
- winC.window?.setFrameOrigin(winFramePoint)
-
- winC.startModal(nil)
- } else if type == .replace {
- if IAPProductsManager.default().isAvailableAllFunction() == false {
- let winC = KMPurchaseCompareWindowController.sharedInstance()
- winC?.kEventName = "Reading_ReplaceText_BuyNow"
- winC?.showWindow(nil)
- return
- }
-
- self.view.window?.makeFirstResponder(nil)
- let toolMode = self.listView.toolMode ?? .none
- let isEditing = self.listView.isEditing() ?? false
- if toolMode == .editPDFToolMode && isEditing {
-
- } else {
- }
-
- let winC = KMSearchReplaceWindowController(with: self.listView, type: .replace)
- self.currentWindowController = winC
- winC.replaceCallback = { [weak self] in
- let toolMode = self?.listView.toolMode ?? .none
- let isEditing = self?.listView.isEditing() ?? false
- if toolMode == .editPDFToolMode && isEditing {
-
- } else {
- }
- }
-
- winC.itemClick = { idx, _ in
- if idx == 1 {
- self.toggleOpenLeftSide(pdfSideBarType: .search)
- }
- }
-
- let targetView = self.pdfToolbarController?.leftViewButton
- let point = targetView?.convert(targetView?.frame.origin ?? .zero, to: nil) ?? .zero
-
- let x = point.x + (self.view.window?.frame.origin.x ?? 0) - 32
- let y = point.y + (self.view.window?.frame.origin.y ?? 0) - 208 - 32
- let winFramePoint = NSPoint(x: x, y: y)
- winC.window?.setFrameOrigin(winFramePoint)
-
- winC.startModal(nil)
- }
- }
-
- }
- extension KMMainViewController: NSSplitViewDelegate {
-
- func splitView(_ splitView: NSSplitView, canCollapseSubview subview: NSView) -> Bool {
- if splitView == infoContendSplitView {
- return subview.isEqual(to: infoSplitCenterView) == false
- }
- return false
- }
-
- func splitView(_ splitView: NSSplitView, shouldCollapseSubview subview: NSView, forDoubleClickOnDividerAt dividerIndex: Int) -> Bool {
- if splitView == infoContendSplitView {
- if(subview.isEqual(to: infoSplitLeftView)) {
-
- } else if(subview.isEqual(to: infoSplitRightView)) {
-
- }
- }
- return false
- }
-
- func splitView(_ splitView: NSSplitView, shouldHideDividerAt dividerIndex: Int) -> Bool {
- if splitView == infoContendSplitView {
- return splitView == infoContendSplitView
- } else if splitView == pdfSplitView {
- return splitView == pdfSplitView
- }
- return false
- }
-
- func splitView(_ splitView: NSSplitView, constrainMaxCoordinate proposedMaximumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
- if(splitView == infoContendSplitView && dividerIndex == 1) {
- return proposedMaximumPosition - MIN_SIDE_PANE_WIDTH.doubleValue
- }
- return proposedMaximumPosition
- }
-
- func splitView(_ splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
- if(splitView == infoContendSplitView && dividerIndex == 0) {
- return proposedMinimumPosition + MIN_SIDE_PANE_WIDTH.doubleValue
- }
- return proposedMinimumPosition
- }
-
- func splitViewDidResizeSubviews(_ notification: Notification) {
- let splitView = notification.object as? NSSplitView
- if(splitView == infoContendSplitView) {
- leftSplitViewResizeFinish()
-
- if(newMwcFlags.settingUpWindow == false && self.view.window?.frameAutosaveName != nil) {
- let leftWidth = infoContendSplitView.isSubviewCollapsed(infoSplitLeftView) ? 0.0 : infoSplitLeftView.frame.width
- UserDefaults.standard.set(leftWidth, forKey: CPDFViewLeftSidePaneWidthKey)
- UserDefaults.standard.synchronize()
- }
- }
-
- NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(splitViewResizeFinish), object: nil)
- self.perform(#selector(splitViewResizeFinish), with: nil, afterDelay: 0.15)
- }
-
- @objc func leftSplitViewResizeFinish() {
- botaViewController?.changeLeftSideBounds()
- }
-
- @objc func splitViewResizeFinish() {
- if infoContendSplitView.isSubviewCollapsed(infoSplitLeftView) {
- if viewManager.pdfSideBarType != .none {
- viewManager.pdfSideBarType = .none
-
- sideBarController?.reloadBOTAData()
- }
- }
- }
-
- }
- extension KMMainViewController: KMPDFSideBarControllerDelegate {
- func kmPDFSideBarControllerDidSidebarTypeUpdated(_ view: KMPDFSideBarController) {
- if viewManager.pdfSideBarType == .none {
- toggleCloseLeftSide()
- } else {
- toggleOpenLeftSide(pdfSideBarType: viewManager.pdfSideBarType)
- }
- }
-
- func kmPDFSideBarControllerDidGotoPage(_ view: KMPDFSideBarController, _ pageIndex: Int) {
- listView.go(toPageIndex: pageIndex, animated: true)
-
- }
-
- }
- extension KMMainViewController: KMPDFToolbarControllerDelegate {
-
-
- func kmPDFToolbarControllerDidToolModeChanged(_ controller: KMPDFToolbarController) {
- refreshToolbarView()
-
- toolbarViewModeChanged()
- }
-
-
- func kmPDFToolbarControllerDidToolbarItemClicked(_ controller: KMPDFToolbarController, _ itemIdentifier: String) {
-
- print("toolbar点击", itemIdentifier)
-
- if toolbarManager.getSubToolItemIdentifys(KMPDFToolbar_PageEdit_Identifier).contains(itemIdentifier) {
-
- if itemIdentifier == KMPDFToolbar_PageEdit_InsertFile_Identifier {
- pageEditViewController?.insertFromPDFAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertBlank_Identifier {
- pageEditViewController?.insertFromBlankAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertClip_Identifier {
- pageEditViewController?.insertFromClipboardAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_InsertScanner_Identifier {
- pageEditViewController?.insertFromScannerAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_Extract_Identifier {
- pageEditViewController?.extractPDFAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_Replace_Identifier {
- pageEditViewController?.replacePDFAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_Split_Identifier {
- pageEditViewController?.splitPDFAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_Reverse_Identifier {
- pageEditViewController?.reversePDFAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_LeftRotate_Identifier {
- pageEditViewController?.rotatePageLeftAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_RightRotate_Identifier{
- pageEditViewController?.rotatePageRightAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_Delete_Identifier {
- pageEditViewController?.deletePageAction()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_Reduce_Identifier {
- pageEditViewController?.zoomOutPageAction()
- if(pageEditViewController?.canZoomInPageSize() == false) {
- toolbarManager.page_Increase_Property.isDisabled = true
- } else {
- toolbarManager.page_Increase_Property.isDisabled = false
- }
- if(pageEditViewController?.canZoomOutPageSize() == false) {
- toolbarManager.page_Reduce_Property.isDisabled = true
- } else {
- toolbarManager.page_Reduce_Property.isDisabled = false
- }
- controller.refreshSecondToolbarItemsState()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_Increase_Identifier {
- pageEditViewController?.zoomInPageAction()
-
- if(pageEditViewController?.canZoomInPageSize() == false) {
- toolbarManager.page_Increase_Property.isDisabled = true
- } else {
- toolbarManager.page_Increase_Property.isDisabled = false
- }
- if(pageEditViewController?.canZoomOutPageSize() == false) {
- toolbarManager.page_Reduce_Property.isDisabled = true
- } else {
- toolbarManager.page_Reduce_Property.isDisabled = false
- }
- controller.refreshSecondToolbarItemsState()
- } else if itemIdentifier == KMPDFToolbar_PageEdit_page_oddPage_Identifier {
- pageEditViewController?.thumbnailChoosePageStyle = .odd
- if(toolbarManager.page_pageInfo_Property.creatable == true) {
- toolbarManager.page_pageInfo_Property.creatable = false
- controller.refreshSecondToolbarItemsState()
- }
- } else if itemIdentifier == KMPDFToolbar_PageEdit_page_EvenPage_Identifier {
- pageEditViewController?.thumbnailChoosePageStyle = .even
- if(toolbarManager.page_pageInfo_Property.creatable == true) {
- toolbarManager.page_pageInfo_Property.creatable = false
- controller.refreshSecondToolbarItemsState()
- }
- } else if itemIdentifier == KMPDFToolbar_PageEdit_page_PortraitPage_Identifier {
- pageEditViewController?.thumbnailChoosePageStyle = .horizontal
- if(toolbarManager.page_pageInfo_Property.creatable == true) {
- toolbarManager.page_pageInfo_Property.creatable = false
- controller.refreshSecondToolbarItemsState()
- }
- } else if itemIdentifier == KMPDFToolbar_PageEdit_page_LandscapePage_Identifier {
- pageEditViewController?.thumbnailChoosePageStyle = .vertical
- if(toolbarManager.page_pageInfo_Property.creatable == true) {
- toolbarManager.page_pageInfo_Property.creatable = false
- controller.refreshSecondToolbarItemsState()
- }
- } else if itemIdentifier == KMPDFToolbar_PageEdit_page_AllPage_Identifier {
- pageEditViewController?.thumbnailChoosePageStyle = .allPage
- if(toolbarManager.page_pageInfo_Property.creatable == true) {
- toolbarManager.page_pageInfo_Property.creatable = false
- controller.refreshSecondToolbarItemsState()
- }
- } else if itemIdentifier == KMPDFToolbar_PageEdit_page_CustomPage_Identifier {
- pageEditViewController?.thumbnailChoosePageStyle = .custom
- toolbarManager.page_pageInfo_Property.text = nil
- if(toolbarManager.page_pageInfo_Property.creatable == false) {
- toolbarManager.page_pageInfo_Property.creatable = true
- }
- controller.refreshSecondToolbarItemsState()
- }
- } else if toolbarManager.getSubToolItemIdentifys(KMPDFToolbar_Markup_Identifier).contains(itemIdentifier) {
-
-
- } else if toolbarManager.getSubToolItemIdentifys(KMPDFToolbar_Edit_Identifier).contains(itemIdentifier) {
-
- if itemIdentifier == KMPDFToolbar_edit_addWatermark_Identifier {
- showWatermarkController()
- } else if itemIdentifier == KMPDFToolbar_edit_removeWatermark_Identifier {
- removePDFWatermark()
- } else if itemIdentifier == KMPDFToolbar_edit_batch_AddWatermark_Identifier {
- batchAddWatermark()
- } else if itemIdentifier == KMPDFToolbar_edit_batchRemoveWatermark_Identifier {
- batchRemoveWatermark()
- } else if itemIdentifier == KMPDFToolbar_edit_addBG_Identifier {
- showBackgroundController()
- } else if itemIdentifier == KMPDFToolbar_edit_removeBG_Identifier {
- removePDFBackground()
- } else if itemIdentifier == KMPDFToolbar_edit_batch_AddBG_Identifier {
- batchAddBackground()
- } else if itemIdentifier == KMPDFToolbar_edit_batchRemoveBG_Identifier {
- batchRemoveBackground()
- } else if itemIdentifier == KMPDFToolbar_edit_addHF_Identifier {
- showHeaderFooterController()
- } else if itemIdentifier == KMPDFToolbar_edit_removeHF_Identifier {
- removeHeaderFooter()
- } else if itemIdentifier == KMPDFToolbar_edit_batch_AddHF_Identifier {
- batchAddHeaderFooter()
- } else if itemIdentifier == KMPDFToolbar_edit_batchRemoveHF_Identifier {
- batchRemoveHeaderFooter()
- } else if itemIdentifier == KMPDFToolbar_edit_addBates_Identifier {
- showBatesController()
- } else if itemIdentifier == KMPDFToolbar_edit_removeBates_Identifier {
- removePDFBates()
- } else if itemIdentifier == KMPDFToolbar_edit_batch_AddBates_Identifier {
- batchAddBates()
- } else if itemIdentifier == KMPDFToolbar_edit_batchRemoveBates_Identifier {
- batchRemoveBates()
- } else if itemIdentifier == KMPDFToolbar_edit_crop_Identifier {
- showCropController()
- }
- } else if toolbarManager.getSubToolItemIdentifys(KMPDFToolbar_Form_Identifier).contains(itemIdentifier) {
-
-
- } else if toolbarManager.getSubToolItemIdentifys(KMPDFToolbar_Fill_Identifier).contains(itemIdentifier) {
-
-
- } else if toolbarManager.getSubToolItemIdentifys(KMPDFToolbar_Convert_Identifier).contains(itemIdentifier) {
-
- if itemIdentifier == KMPDFToolbar_convert_word_Identifier {
- let winC = KMConvertWordWindowController()
- let model = KMDocumentModel(url: listView.document.documentURL)
- winC.documentModel = model
- winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
- } else if itemIdentifier == KMPDFToolbar_convert_ppt_Identifier {
- let winC = KMConvertPPTsWindowController()
- winC.subType = 1
- let model = KMDocumentModel(url: listView.document.documentURL)
- winC.documentModel = model
- winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
- } else if itemIdentifier == KMPDFToolbar_convert_RTF_Identifier {
- let winC = KMConvertPPTsWindowController()
- winC.subType = 2
- let model = KMDocumentModel(url: listView.document.documentURL)
- winC.documentModel = model
- winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
- } else if itemIdentifier == KMPDFToolbar_convert_Text_Identifier {
- let winC = KMConvertPPTsWindowController()
- winC.subType = 4
- let model = KMDocumentModel(url: listView.document.documentURL)
- winC.documentModel = model
- winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
- } else if itemIdentifier == KMPDFToolbar_convert_CSV_Identifier {
- let winC = KMConvertPPTsWindowController()
- winC.subType = 5
- let model = KMDocumentModel(url: listView.document.documentURL)
- winC.documentModel = model
- winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
- } else if itemIdentifier == KMPDFToolbar_convert_excel_Identifier {
- let winC = KMConvertExcelWindowController()
- let model = KMDocumentModel(url: listView.document.documentURL)
- winC.documentModel = model
- winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
- } else if itemIdentifier == KMPDFToolbar_convert_HTML_Identifier {
- let winC = KMConvertHtmlWindowController()
- let model = KMDocumentModel(url: listView.document.documentURL)
- winC.documentModel = model
- winC.own_beginSheetModal(for: self.view.window, completionHandler: nil)
- } else if itemIdentifier == KMPDFToolbar_convert_Json_Identifier {
- let winC = KMConvertJsonWindowController()
- let model = KMDocumentModel(url: listView.document.documentURL)
- winC.documentModel = model
- winC.own_beginSheetModal(for: view.window, completionHandler: nil)
- } else if itemIdentifier == KMPDFToolbar_convert_image_Identifier {
- let winC = KMConvertImageWindowController()
- let model = KMDocumentModel(url: listView.document.documentURL)
- winC.documentModel = model
- winC.own_beginSheetModal(for: view.window, completionHandler: nil)
- } else if itemIdentifier == KMPDFToolbar_convert_imageToPDF_Identifier {
- NSApplication.ShowImageToPDFWindow()
- }
- } else if toolbarManager.getSubToolItemIdentifys(KMPDFToolbar_Protect_Identifier).contains(itemIdentifier) {
-
-
- } else if toolbarManager.getSubToolItemIdentifys(KMPDFToolbar_Tools_Identifier).contains(itemIdentifier) {
-
-
- } else if itemIdentifier == KMPDFToolbar_ViewDisplay_Identifier {
-
- updatePDFDisplaySettingView()
- } else if itemIdentifier == KMPDFToolbar_rightView_Identifier {
-
-
- } else if itemIdentifier == KMPDFToolbar_PageEdit_Identifier {
-
- if viewManager.isPageEditMode == true {
- enterPageEditMode()
- } else {
- exitPageEditMode()
- }
- } else if(itemIdentifier == KMPDFToolbar_undo_Identifier) {
-
- listView.undoManager?.undo()
- } else if(itemIdentifier == KMPDFToolbar_redo_Identifier) {
-
- listView.undoManager?.redo()
- } else if(itemIdentifier == KMPDFToolbar_share_PDF_Identifier ||
- itemIdentifier == KMPDFToolbar_share_Flattened_Identifier ||
- itemIdentifier == KMPDFToolbar_share_Original_Identifier) {
-
- if(itemIdentifier == KMPDFToolbar_share_PDF_Identifier) {
- if let view = controller.findViewWith(KMPDFToolbar_share_Identifier) {
- shareDocument(sender: view)
- }
- } else if(itemIdentifier == KMPDFToolbar_share_Flattened_Identifier) {
- if let view = controller.findViewWith(KMPDFToolbar_share_Identifier) {
- shareFlatten(sender: view)
- }
- } else if(itemIdentifier == KMPDFToolbar_share_Original_Identifier) {
- if let view = controller.findViewWith(KMPDFToolbar_share_Identifier) {
- shareOriginalPDF(sender: view)
- }
- }
- } else {
- print("click else")
- }
-
- refreshToolbarView()
-
- toolbarViewModeChanged()
- }
-
- func kmPDFToolbarControllerDidSelectTextDidBeginEditing(_ controller: KMPDFToolbarController, _ view: ComponentSelect) {
-
- }
-
- func kmPDFToolbarControllerDidSelectTextDidChange(_ controller: KMPDFToolbarController, _ view: ComponentSelect) {
-
- }
-
- func kmPDFToolbarControllerDidSelectTextDidEndEditing(_ controller: KMPDFToolbarController, _ view: ComponentSelect) {
- if view.properties == toolbarManager.page_pageInfo_Property {
- if viewManager.isPageEditMode == true {
- let fileAttribute = KMNFileAttribute()
- fileAttribute.password = listView.document?.password ?? ""
- fileAttribute.pdfDocument = listView.document
- fileAttribute.filePath = listView.document?.documentURL.path ?? ""
- fileAttribute.bAllPage = false
- fileAttribute.pagesType = .PagesString
- fileAttribute.pagesString = view.properties.text ?? ""
-
- let fetchSelectPages = fileAttribute.fetchSelectPages()
- if (fetchSelectPages.isEmpty) {
- let alert = NSAlert()
- alert.alertStyle = .critical
- alert.messageText = String(format: "%@ %@", fileAttribute.filePath.lastPathComponent, KMLocalizedString("Invalid page range or the page number is out of range. Please try again."))
- alert.runModal()
- toolbarManager.page_pageInfo_Property.text = ""
- controller.refreshSecondToolbarItemsState()
- } else {
- var tIndexPaths: Set<IndexPath> = []
- for i in 0 ..< fetchSelectPages.count {
- tIndexPaths.insert(IndexPath(item: (fetchSelectPages[i] - 1), section: 0))
- }
- pageEditViewController?.selectionIndexPaths = tIndexPaths
-
- }
-
- }
- }
- }
-
- func kmPDFToolbarControllerDidExitPageEditMode(_ controller: KMPDFToolbarController) {
- exitPageEditMode()
- }
- }
- extension KMMainViewController: KMRightSideControllerDelegate {
- func kmRightSideControllerDidContendVCUpdated(_ controller: KMRightSideController) {
-
- if (controller.contentViewController is KMCropPropertyController) {
- if let cropVC = rightSideController?.edit_cropController {
- cropVC.pdfView = controller.pdfView
- if cropVC.delegate == nil {
- cropVC.delegate = cropController
- }
- cropVC.reloadData()
- }
- }
- }
- }
- extension KMMainViewController: KMNDisplayViewControllerDelegate {
-
- func displayViewControllerDidDisplayModeChanged(_ controller: KMNDisplayViewController) {
- listView.layoutDocumentView()
-
- }
-
-
- func displayViewControllerDidReadModeUpdated(_ controller: KMNDisplayViewController) {
- if viewManager.isPDFReadMode {
- openPDFReadMode()
- } else {
- exitPDFReadMode()
- }
- }
-
-
- func displayViewControllerDidGotoSlideShow(_ controller: KMNDisplayViewController) {
- togglePresentation(nil)
- }
-
-
- func displayViewControllerDidSplitModeChanged(_ controller: KMNDisplayViewController) {
- reloadPDFSplitInfo()
-
- }
-
- func displayViewControllerDidSplitFileChanged(_ controller: KMNDisplayViewController) {
- splitPDFController?.reloadData()
-
- }
-
- func displayViewControllerDidToolbarStateChanged(_ controller: KMNDisplayViewController) {
- splitPDFController?.refreshToolbarState()
-
- reloadPDFBottomToolbar()
- }
- }
- extension KMMainViewController: KMInteractionProviderProtocol {
- func providerContentView(fullScreenWindow: NSWindow, inset: CGFloat) -> NSView? {
- if(interactionMode == .presentation) {
- if listView.presentationDrawView == nil {
- listView.createPresentationDraw()
- }
-
- presentationTopViewController = KMPresentationTopViewController.init(nibName: "KMPresentationTopViewController", bundle: nil)
- presentationTopViewController?.pdfView = listView
- presentationTopViewController?.delegate = self
- presentationTopViewController?.isSelectionPre = true
- listView.isPresentationMode = true
- presentationTopViewController?.view.frame = CGRect(x: 0, y: (fullScreenWindow.contentView?.bounds.height ?? 0) - 42, width: fullScreenWindow.contentView?.bounds.width ?? 0, height: 42)
- if((presentationTopViewController) != nil) {
- fullScreenWindow.contentView?.addSubview(presentationTopViewController!.view)
- }
- } else {
- listView.frame = NSInsetRect(fullScreenWindow.contentView?.bounds ?? .zero, 0, 0)
- }
-
- fullScreenWindow.contentView?.addSubview(listView)
- if(interactionMode == .presentation) {
- let frame = fullScreenWindow.frame
- listView.frame = CGRectMake(0, 0, frame.size.width, frame.size.height-42)
- listView.autoresizingMask = [.width, .maxYMargin]
- }
- return view
- }
-
- @objc func willEnterInteractionModeNotification(_ sender: Notification) {
- guard let win = sender.object as? NSWindow, win.isEqual(to: self.view.window) else {
- return
- }
- let interactionMode = sender.userInfo?[NSWindow.UserInfo.interactionModeKey] as? KMInteractionMode
- if interactionMode == .presentation {
- let backgroundColor = NSColor.black
- let level = UserDefaults.standard.bool(forKey: "SKUseNormalLevelForPresentationKey") ? NSWindow.Level.normal : NSWindow.Level.popUpMenu
-
- let wasInteractionMode = self.interactionMode
- if wasInteractionMode == .normal {
- self.savedNormalSetup.setDictionary(self.currentPDFSettings() as! [AnyHashable : Any])
- }
-
- if wasInteractionMode == .legacyFullScreen {
- self.enterPresentationMode()
-
- self.listView.frame = (self.view.window?.contentView?.bounds)!
- self.view.window?.contentView?.addSubview(listView)
-
-
- self.view.window?.level = level
- self.listView.layoutDocumentView()
- self.listView.requiresDisplay()
-
- self.forceSubwindowsOnTop(false)
-
- }
- } else {
- KMPrint("2")
- }
- }
-
- @objc func didEnterInteractionModeNotification(_ sender: Notification) {
- guard let win = sender.object as? NSWindow, win.isEqual(to: self.view.window) else {
- return
- }
- if self.interactionMode == .presentation {
-
- self.listView.layoutDocumentView()
- self.listView.requiresDisplay()
- }
- }
-
- @objc func willShowFullScreenNotification(_ sender: Notification) {
- guard let win = sender.object as? NSWindow, win.isEqual(to: self.view.window) else {
- return
- }
- if self.interactionMode == .presentation {
- let view = self.view.window?.firstResponder as? NSView
- if let data = view?.isDescendant(of: self.pdfSplitView), data {
- self.view.window?.makeFirstResponder(nil)
- }
- }
- }
-
- @objc func didShowFullScreenNotification(_ sender: Notification) {
- guard let win = sender.object as? NSWindow, win.isEqual(to: self.view.window) else {
- return
- }
- if self.interactionMode == .presentation {
- self.enterPresentationMode()
- }
- }
- }
- extension KMMainViewController: KMPresentationTopViewControllerDelegate {
- func presentationTopViewExit(_ presentationTopViewController: KMPresentationTopViewController, withButton: NSButton) {
- self.exitFullScreen()
- }
-
- func presentationTopViewClear(_ presentationTopViewController: KMPresentationTopViewController, withButton: NSButton) {
- listView.presentationDrawView?.clear()
- }
-
- func presentationTopViewUndo(_ presentationTopViewController: KMPresentationTopViewController, withButton: NSButton) {
- let presentationDrawView = listView.presentationDrawView
- if presentationDrawView?.canUndo() == true {
- presentationDrawView?.undo()
- }
- }
-
- func presentationTopViewType(_ presentationTopViewController: KMPresentationTopViewController, withButton: NSButton, isSeletion: Bool) {
- listView.isPresentationMode = isSeletion
- if listView.isEnterPresentationDrawMode() == true {
- listView.exitPresentationDrawMode()
- }
- }
-
- func presentationTopViewDrawColor(_ presentationTopViewController: KMPresentationTopViewController, withView: NSView,color:NSColor?) {
- if color == nil{
- listView.exitPresentationDrawMode()
- } else {
- if listView.isEnterPresentationDrawMode() == false {
- listView.enterPresentationDrawMode()
- }
- listView.changePresentationDrawModelColor(color)
- }
- }
- }
- extension KMMainViewController: KMSplitPDFViewControllerDelegate {
- func splitPDFViewControllerDidUpdateFilePath(_ controller: KMSplitPDFViewController) {
- displaySettingController?.reloadData()
-
- }
-
- func splitPDFViewControllerDidUpdatePDFScale(_ controller: KMSplitPDFViewController) {
- if let scaleFactor = controller.pdfView?.scaleFactor {
- listView.scaleFactor = scaleFactor
- }
- }
-
- func splitPDFViewControllerDidUpdatePDFPageIndex(_ controller: KMSplitPDFViewController) {
- if let pageIndex = controller.pdfView?.currentPageIndex {
- listView.go(toPageIndex: pageIndex, animated: false)
- }
-
- }
- }
- extension KMMainViewController: KMEditToolbarViewDelegate {
- func kmEditToolbarViewDidUpdateMode(_ view: KMEditToolbarView) {
- if view.editType == .watermark {
- watermarkViewController?.editSubType = editToolbarView?.editSubType ?? .template
- watermarkViewController?.resetUI()
- watermarkViewController?.reloadData()
- } else if view.editType == .background {
- backgroundViewController?.editSubType = editToolbarView?.editSubType ?? .template
- backgroundViewController?.resetUI()
- backgroundViewController?.reloadData()
- } else if view.editType == .header_Footer {
- headerFooterViewController?.editSubType = editToolbarView?.editSubType ?? .template
- headerFooterViewController?.resetUI()
- headerFooterViewController?.reloadData()
- } else if view.editType == .bates {
- batesViewController?.editSubType = editToolbarView?.editSubType ?? .template
- batesViewController?.resetUI()
- batesViewController?.reloadData()
- }
- }
-
- func kmEditToolbarViewDidChooseBatch(_ view: KMEditToolbarView) {
-
- }
-
- func kmEditToolbarViewDidChooseApply(_ view: KMEditToolbarView) {
- let pageIndex = view.getSelectedPageIndex(listView.document)
- if pageIndex.isEmpty {
- let alert = NSAlert()
- alert.alertStyle = .critical
- alert.messageText = KMLocalizedString("Invalid page range or the page number is out of range. Please try again.")
- alert.runModal()
- return
- }
- let pageString = view.getSelectedPageString(listView.document, pageIndex)
-
- if view.editType == .watermark {
- if let model = watermarkViewController?.currentWatermarkData {
- let watermark = KMPDFWatermarkData.returnWaterMarkWith(model, listView.document)
- watermark.pageString = pageString
- listView.document.addWatermark(watermark)
- listView.layoutDocumentView()
- }
- exitEditToolbarView()
- } else if view.editType == .background {
- if let model = backgroundViewController?.backgroundModel {
- if let background = listView.document.background() {
- KMBackgroundManager.defaultManager.updateBackground(background, withModel: model)
- background.pageString = pageString
- background.update()
-
- listView.document?.refreshPageData()
- listView.layoutDocumentView()
- }
- }
- exitEditToolbarView()
-
- } else if view.editType == .header_Footer {
- if let model = headerFooterViewController?.headerFooterModel {
- if let headerFooter = listView.document.headerFooter() {
- KMHeaderFooterManager.defaultManager.updateCPDFHeaderFooter(headerFooter, withModel: model, Int(listView.document.pageCount))
- headerFooter.pageString = pageString
- headerFooter.update()
-
- listView.document?.refreshPageData()
- listView.layoutDocumentView()
- }
- }
-
- exitEditToolbarView()
-
- } else if view.editType == .bates {
- exitEditToolbarView()
-
- }
-
- }
-
- func kmEditToolbarViewDidChooseExit(_ view: KMEditToolbarView) {
- if view.applyEnable {
- let alert = NSAlert()
- if view.editType == .watermark {
- alert.messageText = NSLocalizedString("There are unapplied Watermark settings, do you want to apply them?", comment: "")
- } else if view.editType == .background {
- alert.messageText = NSLocalizedString("There are unapplied Background settings, do you want to apply them?", comment: "")
- } else if view.editType == .header_Footer {
- alert.messageText = NSLocalizedString("There are unapplied Header & Footer settings, do you want to apply them?", comment: "")
- } else if view.editType == .bates {
- alert.messageText = NSLocalizedString("There are unapplied Bates settings, do you want to apply them?", comment: "")
- }
- alert.informativeText = NSLocalizedString("If not, the changes will be lost.", comment: "")
- alert.addButton(withTitle: NSLocalizedString("Apply", comment: ""))
- alert.addButton(withTitle: NSLocalizedString("Don't Apply", comment: ""))
- alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
- let result = alert.runModal()
- if (result == .alertFirstButtonReturn) {
- self.kmEditToolbarViewDidChooseApply(view)
- } else if (result == .alertSecondButtonReturn) {
-
- exitEditToolbarView()
- } else if (result == .alertThirdButtonReturn) {
-
-
- }
- } else {
- exitEditToolbarView()
- }
- }
- }
- extension KMMainViewController: KMCropControllerDelegate {
- func kmCropControllerDidCrop(_ controller: KMCropController, _ cropRect: CGRect, _ view: KMPageRangeSelectView) {
- let indexs = view.getSelectedPageIndex(listView.document)
- var uIndexs: [UInt] = []
- for index in indexs {
- if index > 0 {
- uIndexs.append(UInt(index-1))
- }
- }
- cropPages(atIndexs: uIndexs, to: [cropRect])
- removeCropController()
- }
-
- func kmCropControllerDidCropSeparate(_ controller: KMCropController, _ view: KMPageRangeSelectView) {
- let indexs = view.getSelectedPageIndex(listView.document)
-
- var rectArray: Array<NSRect> = []
- var uIndexs: [UInt] = []
- for index in indexs {
- if index > 0 {
- uIndexs.append(UInt(index-1))
-
- let page = self.listView.document.page(at: UInt(index-1))
- let rect = KMCropTools.getPageForegroundBox(page!)
- rectArray.append(rect)
- }
- }
- cropPages(atIndexs: uIndexs, to: rectArray)
- removeCropController()
- }
-
- func kmCropControllerDidCropAuto(_ controller: KMCropController, _ view: KMPageRangeSelectView) {
- let indexs = view.getSelectedPageIndex(listView.document)
- var uIndexs: [UInt] = []
- for index in indexs {
- if index > 0 {
- uIndexs.append(UInt(index-1))
- }
- }
- auto_cropPagesWhiteMargin(uIndexs)
- }
-
- func kmCropControllerDidChangedSelectionOrMagnification(_ controller: KMCropController) {
- if let cropVC = rightSideController?.edit_cropController {
- if cropVC.pdfView != controller.pdfView {
- cropVC.pdfView = controller.pdfView
- }
- cropVC.cropSeparateOn = false
- cropVC.cropAutoOn = false
- cropVC.reloadData()
- }
- }
-
- }
- extension KMMainViewController: KMWatermarkControllerDelegate {
- func kmWatermarkControllerDidUpdateMode(_ view: KMWatermarkController) {
- editToolbarView?.editSubType = view.editSubType
- editToolbarView?.reloadData()
-
- }
-
- func kmWatermarkControllerDidWatermarkUpdated(_ view: KMWatermarkController) {
- var applyEnable = true
- if let model = view.currentWatermarkData {
- if model.watermarkType == .text {
- if model.text == nil || model.text?.count == 0 {
- applyEnable = false
- }
- } else if model.watermarkType == .image {
- if model.imagePath == nil {
- applyEnable = false
- }
- }
- } else {
- applyEnable = false
- }
- editToolbarView?.applyEnable = applyEnable
-
- editToolbarView?.reloadData()
-
- }
- }
- extension KMMainViewController: KMBackgroundControllerDelegate {
- func kmBackgroundControllerDidUpdateMode(_ view: KMBackgroundController) {
- editToolbarView?.editSubType = view.editSubType
-
- }
-
- func kmBackgroundControllerDidWatermarkUpdated(_ view: KMBackgroundController) {
- var applyEnable = true
- if let model = view.backgroundModel {
- if model.type == .image {
- if model.imagePath == nil {
- applyEnable = false
- }
- }
- } else {
- applyEnable = false
- }
- editToolbarView?.applyEnable = applyEnable
-
- editToolbarView?.reloadData()
- }
- }
- extension KMMainViewController: KMHeaderFooterControllerDelegate {
- func kmHeaderFooterControllerDidUpdateMode(_ view: KMHeaderFooterController) {
- editToolbarView?.editSubType = view.editSubType
-
- }
-
- func kmHeaderFooterControllerDidModelDataUpdated(_ view: KMHeaderFooterController) {
- var applyEnable = true
- if let model = view.headerFooterModel {
- if model.topLeftString.count == 0 && model.topCenterString.count == 0 && model.topRightString.count == 0 &&
- model.bottomLeftString.count == 0 && model.bottomCenterString.count == 0 && model.bottomRightString.count == 0 {
- applyEnable = false
- }
- } else {
- applyEnable = false
- }
- editToolbarView?.applyEnable = applyEnable
-
- editToolbarView?.reloadData()
- }
- }
- extension KMMainViewController: KMBatesControllerDelegate {
- func kmBatesControllerDidUpdateMode(_ view: KMBatesController) {
- editToolbarView?.editSubType = view.editSubType
- editToolbarView?.reloadData()
-
- }
-
- func kmBatesControllerDidModelDataUpdated(_ view: KMBatesController) {
- var applyEnable = true
- if let model = view.batesModel {
- if model.topLeftString.count == 0 && model.topCenterString.count == 0 && model.topRightString.count == 0 &&
- model.bottomLeftString.count == 0 && model.bottomCenterString.count == 0 && model.bottomRightString.count == 0 {
- applyEnable = false
- }
- } else {
- applyEnable = false
- }
- editToolbarView?.applyEnable = applyEnable
-
- editToolbarView?.reloadData()
- }
-
- }
- extension KMMainViewController: CPDFViewDelegate,CPDFListViewDelegate {
- func pdfViewDocumentDidLoaded(_ pdfView: CPDFView!) {
- sideBarController?.reloadPageTurnerData()
-
- documentLoadComplete()
- }
-
- func pdfViewCurrentPageDidChanged(_ pdfView: CPDFView!) {
-
- sideBarController?.reloadPageTurnerData()
-
- var indexpaths: Set<IndexPath> = []
- indexpaths.insert(IndexPath(item: listView.currentPageIndex, section: 0))
-
- botaViewController?.thumnailViewController?.selectionIndexPaths = indexpaths
-
-
- reloadPDFBottomToolbar()
-
- if viewManager.splitSyncScroll {
- if splitPDFController?.inPDFFirst == false && splitPDFController?.outPDFFirst == false {
- splitPDFController?.outPDFFirst = true
-
- if let splitPDFView = splitPDFController?.pdfView, let document = splitPDFView.document {
- var index = pdfView.currentPageIndex
- if index > document.pageCount {
- index = Int(splitPDFView.document.pageCount - 1)
- }
- splitPDFView.go(toPageIndex: index, animated: false)
- }
- NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(pdfUpdatedFinish), object: nil)
- self.perform(#selector(pdfUpdatedFinish), with: nil, afterDelay: 0.35)
- } else if splitPDFController?.outPDFFirst == true {
- if let splitPDFView = splitPDFController?.pdfView, let document = splitPDFView.document {
- var index = pdfView.currentPageIndex
- if index > document.pageCount {
- index = Int(splitPDFView.document.pageCount - 1)
- }
- splitPDFView.go(toPageIndex: index, animated: false)
- }
-
- NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(pdfUpdatedFinish), object: nil)
- self.perform(#selector(pdfUpdatedFinish), with: nil, afterDelay: 0.35)
- }
- }
-
-
- updateEditModeDocumentWhenPageChanged()
-
-
- }
-
- func pdfViewScaleDidChanged(_ pdfView: CPDFView!) {
-
- pdfToolbarController?.reloadSelectZoomView()
-
- reloadPDFBottomToolbar()
-
-
- if viewManager.splitSyncScroll {
- if splitPDFController?.inPDFFirst == false && splitPDFController?.outPDFFirst == false {
- splitPDFController?.outPDFFirst = true
-
- NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(pdfUpdatedFinish), object: nil)
- self.perform(#selector(pdfUpdatedFinish), with: nil, afterDelay: 0.35)
- } else if splitPDFController?.outPDFFirst == true {
- if let splitPDFView = splitPDFController?.pdfView {
- splitPDFView.scaleFactor = pdfView.scaleFactor
- }
- NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(pdfUpdatedFinish), object: nil)
- self.perform(#selector(pdfUpdatedFinish), with: nil, afterDelay: 0.35)
- }
- }
- }
-
- func pdfViewDidClick(onLink pdfView: CPDFView!, withURL url: String!) {
- if let urlString = url, urlString == kKMPurchaseProductURLString {
-
- return
- }
-
- if url.hasPrefix("smb://") {
- NSWorkspace.shared.openFile(url)
- } else {
- KMTools.openURL(urlString: url)
- }
- }
-
- func pdfViewPerformURL(_ pdfView: CPDFView!, withContent content: String!) {
- KMPrint("pdfViewPerformURL")
- if content != nil {
- NSWorkspace.shared.open(URL(string: content)!)
- } else {
- let alert = NSAlert()
- alert.alertStyle = .critical
- alert.informativeText = NSLocalizedString("The hyperlink is invalid.", comment: "")
- alert.messageText = ""
- alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
- alert.runModal()
- return
- }
- }
-
- func pdfViewPerformPrint(_ pdfView: CPDFView!) {
- KMPrint("pdfViewPerformPrint")
- self.showPrintWindow()
- }
-
- func pdfViewPerformGo(toPage pdfView: CPDFView!) {
- KMPrint("pdfViewPerformGo")
- }
-
- func pdfViewOpenPDF(_ pdfView: CPDFView!, forRemoteGoTo action: CPDFAction!) {
- KMPrint("pdfViewOpenPDF")
- }
-
- func pdfViewPerformReset(_ pdfView: CPDFView!) {
- KMPrint("pdfViewPerformReset")
- pdfView.document?.resetForm()
- }
-
- func pdfViewEditingBlockDidChanged(_ pdfView: CPDFView!) {
- KMPrint("pdfViewEditingBlockDidChanged")
- }
-
- func pdfViewAsBookBookmark() -> NSImage! {
- return NSImage(named: "KMImageNameBookmarkIcon")!
- }
-
-
- func pdfViewEditingSelectionDidChanged(_ pdfView: CPDFView!) {
-
-
- }
-
- func pdfViewEditingAreaDidChanged(_ pdfView: CPDFView!) {
-
- rightSideController?.reloadDataWithPDFView(pdfView: (pdfView as! CPDFListView))
-
- if pdfView is CPDFListView {
- (pdfView as! CPDFListView).isEditImage = false
- }
- }
-
- func pdfViewEditingCropBoundsDidChanged(_ pdfView: CPDFView!, editing editArea: CPDFEditArea!) {
- if editArea != nil && (editArea is CPDFEditImageArea){
- self.listView.cropAreas = editArea as? CPDFEditImageArea
- }
- }
-
-
- func pdfViewEditingAddImageArea(_ pdfView: CPDFView!, add page: CPDFPage!, add rect: CGRect) {
- if (pdfView as! CPDFListView).isEditImage {
-
- return
- }
-
- if rect.size.width < 5 && rect.size.height < 5 {
- pdfView.updateEditing([])
-
- return
- }
-
- let panel = NSOpenPanel()
- panel.allowsMultipleSelection = false
- panel.allowedFileTypes = ["png","jpg"]
- panel.beginSheetModal(for: NSApp.mainWindow!) { response in
- if response == .OK {
- var filePath = panel.url?.path
- let image = NSImage.init(contentsOf: panel.url!)
-
- if image != nil {
- var imageRect = rect
- let imageSize = image!.size
- var previewSize = rect.size
- var isChangeSize = false
- if previewSize.width == 0 && previewSize.height == 0 {
- previewSize = CGSize(width: 500, height: 500)
- isChangeSize = true
- }
-
- var scale = min(previewSize.width / imageSize.width, previewSize.height / imageSize.height)
- if scale < 1 {
-
- } else {
- let wh = max(imageSize.width, imageSize.height)
- if wh >= 72 {
- scale = min(scale, 1)
- } else {
- scale = min(72 / imageSize.width, 72 / imageSize.height)
- }
- }
-
- let newSize = CGSize(width: imageSize.width * scale, height: imageSize.height * scale)
-
- if isChangeSize {
- imageRect.origin.x = imageRect.origin.x - newSize.width / 2
- imageRect.origin.y = imageRect.origin.y - newSize.height / 2
- } else {
- imageRect.origin.x = imageRect.origin.x + imageRect.width / 2 - newSize.width / 2
- imageRect.origin.y = imageRect.origin.y + imageRect.height / 2 - newSize.height / 2
- }
-
- imageRect.size = newSize
- let limitWidth = 1920.0
- if imageSize.width > limitWidth || imageSize.height > limitWidth {
- filePath = KMImageOptimization.needCompressImageLosslessly(image: image!,
- targetSize: CGSize(width: limitWidth, height: limitWidth),
- maxSizeInBytes: 1024 * 1024 * 5,
- targetCompression: 1.0)
- }
-
-
- let pageRect = self.listView.currentPage().bounds ?? .zero
- if imageRect.width > pageRect.width ||
- imageRect.height > pageRect.height {
- let pageScale = min(pageRect.width / imageSize.width, pageRect.height / imageSize.height)
- imageRect = CGRect(x: imageRect.origin.x,
- y: imageRect.origin.y,
- width: imageRect.width * pageScale,
- height: imageRect.height * pageScale)
- }
-
- if imageRect.origin.x < 0 {
- imageRect.origin.x = 5
- }
-
- if imageRect.origin.y < 0 {
- imageRect.origin.y = 5
- }
-
- if imageRect.origin.x + imageRect.width > pageRect.width ||
- imageRect.origin.y + imageRect.height > pageRect.height {
- let offsetX = imageRect.origin.x + imageRect.width - pageRect.width
- let offsetY = imageRect.origin.y + imageRect.height - pageRect.height
-
- imageRect.origin.x = imageRect.origin.x - offsetX - 5
- imageRect.origin.y = imageRect.origin.y - offsetY - 5
- }
- DispatchQueue.main.async {
- self.listView.createImagePath(filePath, rect: imageRect, page: pdfView.currentPage())
- }
- }
- }
- }
- }
-
- func pdfViewEditingAddTextArea(_ pdfView: CPDFView!, add page: CPDFPage!, add rect: CGRect) {
-
- if rect.size.width < 5 && rect.size.height < 5 {
- let areas = self.listView.km_EditingAreas()
- if let area = areas.last {
- if let data = area as? CPDFEditTextArea {
- if let str = data.editTextAreaString(), str.isEmpty {
- self.listView.remove(with: area)
- } else {
- self.listView.updateEditing([])
- }
- }
- }
- return
- }
-
- var newRect = rect
- if rect.size.equalTo(.zero) {
- newRect = CGRect(x: rect.origin.x, y: rect.origin.y - 12, width: 20, height: 12)
- } else {
- newRect = CGRect(x: rect.origin.x, y: rect.origin.y + rect.size.height - 12, width: rect.size.width, height: 12)
- }
-
- let model = KMEditPDFTextManager.manager.fetchUserDefaultData(type: .commonly)
- let fontSize = model.fontSize
- let fontColor = model.color
- let fontAlign = model.alignment
- NSColorPanel.shared.color = fontColor
-
- let cfont = CPDFFont(familyName: model.fontName, fontStyle: model.fontStyle)
- let fontNameZ = CPDFFont.convertAppleFont(cfont)
- let font = NSFont(name: fontNameZ ?? "Helvetica", size: fontSize)
-
- let attri = CEditAttributes()
- attri.font = font!
- attri.fontColor = fontColor
- attri.alignment = fontAlign
- attri.isBold = model.bold
- attri.isItalic = model.italic
-
- self.listView.createStringBounds(newRect, with: attri, page: page)
-
- }
-
- func pdfViewMobileEditingBegan(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
- rightSideController?.reloadEditingAreas()
- }
-
- func pdfViewMobileEditingMove(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
- rightSideController?.reloadEditingAreas()
- }
-
- func pdfViewMobileEditingEnd(_ point: CGPoint, for pdfView: CPDFView!, forEditing editingAreas: [CPDFEditArea]!) {
- rightSideController?.reloadEditingAreas()
-
- }
-
- func pdfViewEditingSelectCharDidChanged(_ pdfView: CPDFView!) {
- rightSideController?.reloadEditingAreas()
- }
-
- func pdfViewEditingExitCropMode(_ pdfView: CPDFView!, forEditing editingArea: CPDFEditImageArea!) {
- rightSideController?.reloadEditingAreas()
- }
-
- func pdfViewEditingOperationDidChanged(_ pdfView: CPDFView!) {
- let areas = self.listView.km_editingImageAreas()
- if areas.count == 1 {
- if let data = areas.first as? CPDFEditImageArea {
- let updating = self.listView.editAreaBoundUpdating
- if updating {
- self.listView.editAreaBoundUpdating = false
- }
- }
- }
-
- }
-
- func pdfViewEditingDoubleClick(_ pdfView: CPDFView!, imageArea editArea: CPDFEditArea!) {
-
- }
-
- func pdfListViewKeyDownIsContinue(_ pdfListView: CPDFListView!, theEvent: NSEvent!) -> Bool {
- let command = theEvent.modifierFlags.contains(.command)
- let control = theEvent.modifierFlags.contains(.control)
-
- KMPrint(theEvent.keyCode)
- if self.listView.isEditing() == true {
- if control && theEvent.keyCode == 11 {
- self.listView.setEditingTextarea_Bold()
- rightSideController?.reloadEditingAreas()
-
- return false
- } else if control && theEvent.keyCode == 34 {
- self.listView.setEditingTextarea_Italic()
- rightSideController?.reloadEditingAreas()
-
- return false
- } else if theEvent.keyCode == 36 {
- if self.listView.isCropMode {
- self.listView.cropComfirmAction()
- rightSideController?.reloadEditingAreas()
-
- return false
- }
- } else if theEvent.keyCode == 53 {
- if self.listView.isCropMode {
- self.listView.cropCancelAction()
- rightSideController?.reloadEditingAreas()
-
- return false
- }
- }
- }
-
- if (theEvent.keyCode == 11 && command) {
- self.menuItemBookMarkClick_add(sender: NSMenuItem())
- return false
- } else if (command && control && theEvent.keyCode == 14) {
- return false
- } else if (theEvent.keyCode == 123) {
- if(self.listView.isEditing() && !self.listView.isSelecteditAreaNotEdit()) {
- return false
- } else {
- if (self.pdfViewCanHorizontalScroll() == false && self.listView.canGoToPreviousPage()) {
- self.listView.goToPreviousPage(nil)
- return false
- }
- }
- } else if (theEvent.keyCode == 126) {
- if(self.listView.isEditing() && !self.listView.isSelecteditAreaNotEdit()) {
- return false
- } else {
- if (self.listView.isContinousScroll()) {
- return true
- }
- if (self.pdfViewCanVerticalScroll() == false && self.listView.canGoToPreviousPage()) {
- self.listView.goToPreviousPage(nil)
- return false
- }
- }
- } else if (theEvent.keyCode == 124) {
- if(self.listView.isEditing() && !self.listView.isSelecteditAreaNotEdit()) {
- return false
- } else {
- if (self.pdfViewCanHorizontalScroll() == false && self.listView.canGoToNextPage()) {
- self.listView.goToNextPage(nil)
- return false
- }
- }
- } else if (theEvent.keyCode == 125) {
- if(self.listView.isEditing() && !self.listView.isSelecteditAreaNotEdit()) {
- return false
- } else {
- if (self.listView.isContinousScroll()) {
- return true
- }
- if (self.pdfViewCanVerticalScroll() == false && self.listView.canGoToNextPage()) {
- self.listView.goToNextPage(nil)
- return false
- }
- }
- } else if (theEvent.keyCode == 36) {
- if self.listView.annotationType == .addImage || self.listView.annotationType == .addText {
- if self.listView.isEditImage {
- self.menuItemEditingClick_CropImage(sender: NSMenuItem())
- }
- }
- }
-
- if theEvent.keyCode == 53 {
-
-
-
- if viewManager.isPDFReadMode {
- self.exitPDFReadMode()
- }
-
- self.leftSideViewCancelSelect()
-
- }
- return true
- }
-
- func pdfListViewMenuValidate(_ pdfListView: CPDFListView!, menuItem: NSMenuItem!, isTakesEffect: UnsafeMutablePointer<ObjCBool>!) -> Bool {
- guard let action = menuItem.action else {
- isTakesEffect.pointee = false
- return false
- }
-
- if (KMSystemMenu.isEditSelector(sel: action)) {
- if (KMSystemMenu.Edit.deleteSelector == action) {
- isTakesEffect.pointee = true
- return self.listView.activeAnnotations.count > 0
- } else if (KMSystemMenu.Edit.copySelector == action) {
- isTakesEffect.pointee = true
- return true
- } else if (KMSystemMenu.Edit.cutSelector == action) {
- isTakesEffect.pointee = true
- return self.listView.canCopy()
- } else if (KMSystemMenu.Edit.pasteSelector == action) {
- isTakesEffect.pointee = true
- return self.listView.canPaste()
- }
- }
-
- isTakesEffect.pointee = false
- return false
- }
-
-
- func cPDFListView(_ pdfListView: CPDFListView, didDelete annotation: CPDFAnnotation, in pdfPage: CPDFPage) {
- self.leftSideViewController.updateThumbnail(at: Int(pdfPage.pageIndex()))
- }
-
- func pdfListViewChangeatioActiveAnnotations(_ pdfListView: CPDFListView!, forActiveAnnotations annotations: [CPDFAnnotation]!, isRightMenu: Bool) {
- self.view.window?.makeFirstResponder(self.listView)
-
- if isRightMenu {
-
- } else if annotations.count > 0 {
- if annotations.count > 1 {
- let fristAnnotation = annotations.first
- var isSameAnnotation = true
- let className = NSStringFromClass(fristAnnotation!.classForCoder)
- for annotation in annotations {
- let cunrrentClassName = NSStringFromClass(annotation.classForCoder)
- if (className == "CPDFSquareAnnotation") ||
- (className == "CPDFCircleAnnotation") ||
- (className == "CPDFLineAnnotation") {
- if (cunrrentClassName != "CPDFSquareAnnotation") &&
- (cunrrentClassName != "CPDFCircleAnnotation") &&
- (cunrrentClassName != "CPDFLineAnnotation") {
- isSameAnnotation = false
- }
- } else {
- if className != cunrrentClassName {
- isSameAnnotation = false
- }
- }
- }
- if isSameAnnotation == false {
-
- } else {
- self.toggleOpenRightSide()
- }
-
- self.rightSideController?.reloadDataWithPDFView(pdfView: pdfListView)
- } else {
- let fristAnnotation = annotations.first
- let className = NSStringFromClass(fristAnnotation!.classForCoder)
- if self.viewManager.isPDFReadMode {
- toggleCloseRightSide()
- } else {
- if className != "CPDFStampAnnotation" &&
- className != "CPDFSignatureAnnotation" &&
- className != "CPDFListStampAnnotation" {
- self.toggleOpenRightSide()
- }
- self.rightSideController?.reloadDataWithPDFView(pdfView: pdfListView)
-
- }
- }
-
- if (listView.activeAnnotation.isKind(of: CPDFLineAnnotation.self)) {
- if (!(listView.activeAnnotation as! CPDFLineAnnotation).isMeasure) {
- cancelMeasureType()
- } else {
- if distanceMeasureInfoWindowController == nil {
- let measureInfo = CPDFDistanceMeasureInfo()
- distanceMeasureInfoWindowController = CDistanceMeasureInfoWindowController()
- distanceMeasureInfoWindowController?.measureInfo = measureInfo
- distanceMeasureInfoWindowController?.delegate = self
- }
- }
- } else if (!listView.activeAnnotation.isKind(of: CPDFPolygonAnnotation.self) && !listView.activeAnnotation.isKind(of: CPDFPolylineAnnotation.self)) {
- cancelMeasureType()
- } else if (listView.activeAnnotation.isKind(of: CPDFPolygonAnnotation.self) || listView.activeAnnotation.isKind(of: CPDFPolylineAnnotation.self)) {
- if perimeterMeasureInfoWindowController == nil {
- let measureInfo = CPDFPerimeterMeasureInfo()
- perimeterMeasureInfoWindowController = CPerimeterMeasureInfoWindowController()
- perimeterMeasureInfoWindowController?.measureInfo = measureInfo
- perimeterMeasureInfoWindowController?.delegate = self
- }
- if areaMeasureInfoWindowController == nil {
- let measureInfo = CPDFAreaMeasureInfo()
- areaMeasureInfoWindowController = CAreaMeasureInfoWindowController()
- areaMeasureInfoWindowController?.measureInfo = measureInfo
- areaMeasureInfoWindowController?.delegate = self
- }
- }
- } else if (annotations.count == 0){
- if pdfListView.annotationType == .unkown {
- toggleCloseRightSide()
- } else {
- if self.viewManager.isPDFReadMode {
- toggleCloseRightSide()
- } else {
- toggleOpenRightSide()
- }
- }
- rightSideController?.reloadDataWithPDFView(pdfView: pdfListView)
-
- }
- }
-
- func pdfListViewChangedAnnotationType(_ pdfListView: CPDFListView!, for annotationType: CAnnotationType) {
- if(annotationType == .unkown) {
- toggleCloseRightSide()
- }
- let aType = annotationType
- if aType.isMarkup() || aType == .anchored || aType == .freeText || aType.isSquare() || aType == .link {
- KMDataManager.ud_set(annotationType.rawValue, forKey: SKLastAnnotationModeKey)
- }
- }
-
-
- func pdfListViewLinkDestinationStart(_ pdfListView: CPDFListView!, withActiveAnnotation annotation: CPDFAnnotation!) {
-
- }
-
-
- func pdfListViewLinkDestinationEnd(_ pdfListView: CPDFListView!, withActiveAnnotation annotation: CPDFAnnotation!) {
-
- }
-
- func pdfListViewMenuItemsEditing(at point: CGPoint, for page: CPDFPage!, menuItems: [NSMenuItem]!) -> [NSMenuItem]! {
- if (listView.toolMode != CToolMode.editPDFToolMode) {
- return menuItems
- }
- var tMenuItems = menuItems;
-
- if(listView.isSelectEditCharRange() ||
- listView.isSelecteditArea(with: point)) {
- tMenuItems?.append(NSMenuItem.separator())
- }
- let areas = self.listView.editingAreas() ?? []
- if areas.count == 1 {
- let fristAreas = areas.first
- if fristAreas is CPDFEditImageArea {
- self.listView.selectImageAreas = fristAreas as? CPDFEditImageArea
- if self.listView.isEditImage {
- tMenuItems?.removeAll()
- tMenuItems?.append(self.corpImageMenuItem())
- tMenuItems?.append(self.cancelCorpImageMenuItem())
- tMenuItems?.append(self.restoreCorpImageMenuItem())
- } else {
- tMenuItems?.append(NSMenuItem.separator())
- tMenuItems?.append(self.cutImageArea())
- tMenuItems?.append(self.replaceImageArea())
- tMenuItems?.append(self.exportImageArea())
- }
- } else {
- if tMenuItems?.count != 1 {
- tMenuItems?.swapAt(0, 1)
- }
- }
- } else if areas.count == 0 {
- tMenuItems?.append(NSMenuItem.separator())
- tMenuItems?.append(self.addText())
- tMenuItems?.append(self.addImage())
- }
-
- return tMenuItems
- }
-
- func pdfListViewMenu(forEvent pdfListView: CPDFListView!, for theEvent: NSEvent!, click menu: AutoreleasingUnsafeMutablePointer<NSMenu?>!, isMoveSelectAnno: Bool) {
- self.mouseRightMenuEvent = theEvent
- var currentMenu : NSMenu = menu.pointee!
-
- if let activeAnno = listView.activeAnnotation as? KMTableAnnotation {
- var pagePoint = NSPoint()
- _ = self.listView.pageAndPoint(&pagePoint, for: theEvent, nearest: true)
- currentMenu.removeAllItems()
- let annotation = activeAnno
- annotation.completeEditCellText()
- if !(NSIsEmptyRect(annotation.drawRect)) {
- annotation.drawLine(pagePoint)
- NotificationCenter.default.post(name: NSNotification.Name.KMPDFViewTableAnnotationDidChange, object: self, userInfo: ["point": NSValue(point: pagePoint)])
- }
- if (annotation.rowNumber - annotation.currentCell.row - 1) < 0 {
- return
- }
- currentMenu = tableMenu(currentMenu, withTable: listView.activeAnnotation as! KMTableAnnotation, point: pagePoint)
- listView.needsDisplay = true
- return
- }
-
-
- var pagePoint: NSPoint = .zero
- if let page = self.listView.pageAndPoint(&pagePoint, for: theEvent, nearest: true) {
- let anno = page.annotation(at: pagePoint)
-
-
-
- let item1 = NSMenuItem(title: NSLocalizedString("Delete", comment: ""), action: #selector(menuItemActionMeasureDelete), target: self)
- item1.representedObject = anno
- let item2 = NSMenuItem(title: NSLocalizedString("Edit Note", comment: ""), action: #selector(menuItemActionMeasureEditNote), target: self)
- item2.representedObject = anno
- let item3 = NSMenuItem(title: NSLocalizedString("Settings", comment: ""), action: #selector(menuItemActionMeasureSetting), target: self)
- item3.representedObject = anno
-
- if let data = anno as? CPDFPolygonAnnotation {
- currentMenu.removeAllItems()
-
- currentMenu.insertItem(item1, at: 0)
- currentMenu.insertItem(item2, at: 1)
- currentMenu.insertItem(item3, at: 2)
- return
- }
- if let data = anno as? CPDFPolylineAnnotation {
- currentMenu.removeAllItems()
- currentMenu.insertItem(item1, at: 0)
- currentMenu.insertItem(item2, at: 1)
- currentMenu.insertItem(item3, at: 2)
- return
- }
- if let data = anno as? CPDFLineAnnotation, data.isMeasure {
- currentMenu.removeAllItems()
- currentMenu.insertItem(item1, at: 0)
- currentMenu.insertItem(item2, at: 1)
- currentMenu.insertItem(item3, at: 2)
- return
- }
- }
-
-
- if (listView.toolMode == .selectToolMode){
- currentMenu.insertItem(NSMenuItem.separator(), at: 3)
- currentMenu.insertItem(self.printingMenu(), at: 3)
- currentMenu.insertItem(self.setTTSStype(), at: 3)
- currentMenu.insertItem(self.setCropStype(), at: 3)
- currentMenu.insertItem(self.setSnapshotStype(), at: 3)
- let export = NSMenuItem(title: NSLocalizedString("Export", comment: ""), action: nil, target: self)
- export.submenu = self.exportMenu()
- currentMenu.insertItem(export, at: 3)
- currentMenu.insertItem(NSMenuItem.separator(), at: 3)
- if listView.activeAnnotation == nil{
- currentMenu.insertItem(self.setAnnotationToolStype(), at: 3)
- currentMenu.insertItem(NSMenuItem.separator(), at: 3)
- }
-
- currentMenu.insertItem(NSMenuItem.separator(), at: currentMenu.items.count - 3)
- currentMenu.insertItem(self.addReadModelStype(), at: currentMenu.items.count - 3)
-
- currentMenu.insertItem(NSMenuItem.separator(), at: 0)
- currentMenu.insertItem(self.setAITranslateStype(), at: 0)
- currentMenu.insertItem(self.setAIProofreadStype(), at: 0)
- currentMenu.insertItem(self.setAIRewriteStype(), at: 0)
- return
- }
- if (listView.toolMode == .moveToolMode || listView.toolMode == .magnifyToolMode){
- currentMenu.insertItem(NSMenuItem.separator(), at: 0)
- currentMenu.insertItem(self.setTTSStype(), at: 0)
- currentMenu.insertItem(self.setCropStype(), at: 0)
- currentMenu.insertItem(self.setSnapshotStype(), at: 0)
- currentMenu.insertItem(NSMenuItem.separator(), at: 0)
-
- currentMenu.insertItem(self.addOutlineStype(), at: 0)
- currentMenu.insertItem(self.addBookmarkMenu(), at: 0)
- if listView.activeAnnotation == nil{
- currentMenu.insertItem(NSMenuItem.separator(), at: 0)
- currentMenu.insertItem(self.setAnnotationToolStype(), at: 0)
- }
-
- currentMenu.insertItem(NSMenuItem.separator(), at: 0)
- currentMenu.insertItem(self.setAITranslateStype(), at: 0)
- currentMenu.insertItem(self.setAIProofreadStype(), at: 0)
- currentMenu.insertItem(self.setAIRewriteStype(), at: 0)
- return
- }
-
- if currentMenu.items.count > 3 {
- currentMenu.insertItem(NSMenuItem.separator(), at: currentMenu.items.count - 3)
- currentMenu.insertItem(self.addReadModelStype(), at: currentMenu.items.count - 3)
- }
- if listView.currentSelection != nil && listView.activeAnnotations.count < 1{
- if listView.currentSelection.selectionType() == .text {
- currentMenu.insertItem(NSMenuItem.separator(), at: 3)
- currentMenu.insertItem(self.setSearchBaiduStype(), at: 3)
- currentMenu.insertItem(NSMenuItem.separator(), at: 3)
- currentMenu.insertItem(self.setLookUpStype(), at: 3)
- currentMenu.insertItem(NSMenuItem.separator(), at: 3)
- currentMenu.insertItem(self.addOutlineStype(), at: 3)
- currentMenu.insertItem(NSMenuItem.separator(), at: 3)
- currentMenu.insertItem(self.setAnnotationToolStype(), at: 3)
- currentMenu.insertItem(self.setTTSStype(), at: 3)
- currentMenu.insertItem(NSMenuItem.separator(), at: 3)
- currentMenu.insertItem(self.setShareStype(), at: 3)
- currentMenu.insertItem(NSMenuItem.separator(), at: 3)
- }
- currentMenu.insertItem(self.enterAnnotationStype(), at: 3)
- currentMenu.insertItem(NSMenuItem.separator(), at: 3)
- if listView.currentSelection.selectionType() == .image{
- currentMenu.insertItem(NSMenuItem.separator(), at: 6)
- currentMenu.insertItem(self.addOutlineStype(), at: 6)
- currentMenu.insertItem(NSMenuItem.separator(), at: 6)
- currentMenu.insertItem(self.setAnnotationToolStype(), at: 6)
-
- }
- if listView.currentSelection.selectionType() == .text {
- currentMenu.insertItem(NSMenuItem.separator(), at: currentMenu.items.count)
- currentMenu.insertItem(self.setTranslateStype(), at: currentMenu.items.count)
- currentMenu.insertItem(NSMenuItem.separator(), at: currentMenu.items.count)
- }
- }
- if listView.activeAnnotation != nil || isMoveSelectAnno {
- if let data = self.listView.activeAnnotation?.type?.lowercased(), data == "stamp"{
- currentMenu.insertItem(NSMenuItem.separator(), at: currentMenu.items.count - 15)
- currentMenu.insertItem(self.enterAnnotationStype(), at: currentMenu.items.count - 15)
- currentMenu.insertItem(NSMenuItem.separator(), at: currentMenu.items.count - 15)
- }else{
- currentMenu.insertItem(NSMenuItem.separator(), at: currentMenu.items.count - 15)
- currentMenu.insertItem(self.enterAnnotationStype(), at: currentMenu.items.count - 15)
- if let anno = self.listView.activeAnnotation, anno.isKind(of: CPDFStampAnnotation.self) {
- } else {
- currentMenu.insertItem(NSMenuItem.separator(), at: currentMenu.items.count - 15)
- currentMenu.insertItem(self.setShareStype(), at: currentMenu.items.count - 15)
- }
- currentMenu.insertItem(NSMenuItem.separator(), at: currentMenu.items.count - 15)
- }
- }
-
- if listView.activeAnnotation == nil && listView.currentSelection == nil{
- currentMenu.insertItem(NSMenuItem.separator(), at: currentMenu.items.count)
- if(listView.toolMode == .selectToolMode) {
- if NSIsEmptyRect(listView.currentSelectionRect()) {
- currentMenu.insertItem(self.zoomSelectionMenuItem(), at: 0)
- currentMenu.insertItem(NSMenuItem.separator(), at: 0)
- }
- currentMenu.insertItem(self.printingMenu(), at: 0)
- currentMenu.insertItem(self.setTTSStype(), at: 0)
- currentMenu.insertItem(self.setCropStype(), at: 0)
- currentMenu.insertItem(self.setSnapshotStype(), at: 0)
- let export = NSMenuItem(title: NSLocalizedString("Export", comment: ""), action: nil, target: self)
- export.submenu = self.exportMenu()
- currentMenu.insertItem(export, at: currentMenu.items.count)
-
- }else{
- currentMenu.insertItem(NSMenuItem.separator(), at: 2)
- currentMenu.insertItem(self.setTTSStype(), at: 2)
- currentMenu.insertItem(self.setCropStype(), at: 2)
- currentMenu.insertItem(self.setSnapshotStype(), at: 2)
- currentMenu.insertItem(NSMenuItem.separator(), at: 2)
-
- currentMenu.insertItem(self.addOutlineStype(), at: 2)
- currentMenu.insertItem(NSMenuItem.separator(), at: 2)
- currentMenu.insertItem(self.enterAnnotationStype(), at: 2)
- currentMenu.insertItem(NSMenuItem.separator(), at: 2)
-
- if(currentMenu.items.count > 4) {
- currentMenu.insertItem(NSMenuItem.separator(), at: 5)
- }
- if(currentMenu.items.count > 5) {
- currentMenu.insertItem(self.addBookmarkMenu(), at: 6)
- }
-
- currentMenu.insertItem(self.setAutoScrollStype(), at: currentMenu.items.count)
- }
- currentMenu.insertItem(self.setAnnotationToolStype(), at: 5)
- }
-
- currentMenu.insertItem(NSMenuItem.separator(), at: 0)
- currentMenu.insertItem(self.setAITranslateStype(), at: 0)
- currentMenu.insertItem(self.setAIProofreadStype(), at: 0)
- currentMenu.insertItem(self.setAIRewriteStype(), at: 0)
-
- for item in currentMenu.items {
- if (item.action == NSSelectorFromString("menuItemClick_HidenorShowNote:")) {
-
- item.action = #selector(menuItemClick_HidenorShowNote)
- item.target = self
- break
- }
- }
- }
-
- func pdfListViewAddAnnotations(_ pdfListView: CPDFListView!, forAdd annotations: [CPDFAnnotation]!, in pdfPage: CPDFPage!) {
- var addRedact = false
- for anno in annotations {
- if (anno.isKind(of: CPDFRedactAnnotation.self)) {
- addRedact = true
- } else if anno is CPDFSquareAnnotation || anno is CPDFCircleAnnotation {
- anno.contents = pdfPage?.string(for: anno.bounds) ?? ""
- }
- }
- self.model.hasAddRedact = addRedact
- if self.listView.toolMode == .moveToolMode {
- self.listView.toolMode = .textToolMode
- self.listView.annotationType = .unkown
-
- }
- if (self.model.rightMouseEventing) {
- self.model.rightMouseEventing = false
-
-
-
- }
- self.leftSideViewController.refreshUIForAddAnnotation(annos: annotations, page: pdfPage)
- }
-
- func pdfListViewRemoveAnnotations(_ pdfListView: CPDFListView!, forRemove annotations: [CPDFAnnotation]!, in pdfPage: CPDFPage!) {
- self.leftSideViewController.annoList_refreshUIForDeleteAnnotations(annos: annotations, page: pdfPage)
- }
-
- func pdfListViewDidSelectionEnd(_ pdfListView: CPDFListView!) {
- if (!self.listView.isEqual(to: pdfListView)) {
- return
-
- }
-
- if (self.listView.toolMode != .selectToolMode) {
- return
- }
-
- }
-
- func pdfListViewKeyDowClosePanel(_ speedy: CPDFViewSidebarSpeedMode, event theEvent: NSEvent!) {
- if(speedy == .right) {
- self.toggleRightPane()
- } else if (speedy == .left) {
- self.menuItemAction_hiddenLeftSide(speedy)
- }
- }
-
- func pdfListViewEventMarkupColor(with annotation: CPDFAnnotation!) -> [NSColor]! {
- if (annotation.isKind(of: CPDFMarkupAnnotation.self)) {
- if (annotation as! CPDFMarkupAnnotation).markupType() == .highlight {
- return KMAnnotationPropertiesColorManager.manager.markHighlightColors
- } else {
- return KMAnnotationPropertiesColorManager.manager.markOtherColors
- }
- } else {
- return KMAnnotationPropertiesColorManager.manager.markOtherColors
- }
- }
-
- func pdfListViewHaveDocumentAttribute() -> Bool {
- if(!self.listView.document.allowsCopying) {
- self.removeOwnerPassword()
- return false
- }
- return true
- }
-
- func pdfListView(_ sender: CPDFListView!, showSnapshotAtPageNumber pageNum: Int, for rect: NSRect, scaleFactor: CGFloat, autoFits: Bool) {
- let swc = KMSnapshotWindowController(windowNibName: "SnapshotWindow")
- swc.delegate = self
- swc.setPdfDocument(self.listView.document, goToPageNumber: pageNum, rect: rect, scaleFactor: scaleFactor, autoFits: autoFits)
- swc.forceOnTop = self.interactionMode != .normal
- self.myDocument?.addWindowController(swc)
- }
-
- func pdfListView(_ pdfView: CPDFListView!, documentDataDidChanged docData: Any!, withInfo info: [AnyHashable : Any]!) {
- if let data = info?[CPDFListView.outlineKey] as? Bool, data {
- guard let ol = docData as? CPDFOutline else {
- return
- }
- let add = info?[CPDFListView.outlineAddKey] as? Bool ?? false
- let remove = info?[CPDFListView.outlineRemoveKey] as? Bool ?? false
- if add {
- self.leftSideViewController.addOutlineAfter(ol)
- }
- if remove {
- self.leftSideViewController.removeOutlineAfter(ol)
- }
-
- let demote = info?[CPDFListView.outlineDemoteKey] as? Bool ?? false
- let promote = info?[CPDFListView.outlinePromoteKey] as? Bool ?? false
- if demote {
- self.leftSideViewController.demoteOutlineAfter(ol)
- }
- if promote {
- self.leftSideViewController.promoteOutlineAfter(ol)
- }
- }
- }
-
-
- func pdfListViewDidTextFontChanged(_ pdfListView: CPDFListView!) {
-
- }
-
- func pdfListViewDidTextColorChanged(_ pdfListView: CPDFListView!, with color: NSColor!) {
-
- }
-
- func pdfListViewAnnotationMeasureInfoChange(_ pdfListView: CPDFListView!, with annotation: CPDFAnnotation!) {
- guard let data = annotation else {
- if distanceMeasureInfoWindowController?.window?.isVisible == true {
- distanceMeasureInfoWindowController?.clearData()
- }
- return
- }
- if let lineAnnotation = annotation as? CPDFLineAnnotation {
- handleLineAnnotation(lineAnnotation)
- } else if let polylineAnnotation = annotation as? CPDFPolylineAnnotation {
- handlePolylineAnnotation(polylineAnnotation)
- } else if let polygonAnnotation = annotation as? CPDFPolygonAnnotation {
- handlePolygonAnnotation(polygonAnnotation)
- }
- }
-
- func pdfListViewMeasureCancel(_ pdfListView: CPDFListView!) {
- cancelMeasureType()
- }
-
- func tableMenu(_ menu: NSMenu, withTable table: KMTableAnnotation, point: CGPoint) -> NSMenu {
- if table.currentCell.row >= 0 && table.currentCell.column >= 0 {
- let itemTitles = ["Edit", "", "Add Row Above", "Add Row Below", "", "Add Column Before", "Add Column After", "", "Delete Row", "Delete Column", "Delete Table", "Cut", "Copy", "Paste", "Paste and Match Style", "Delete Cell Contents", "Clear All"]
- let actions = ["formAnnotTextEdit:", "", "addRowAbove:", "addRowBelow:", "", "addColumnBefore:", "addColumnAfter:", "", "deleteRow:", "deleteColumn:", "deleteTabel", "cutCell:", "copyCell:", "pasteCell:", "pasteAndMatchStyle:", "deleteCellContents:", "clearAll:"]
- for i in 0..<itemTitles.count {
- var item: NSMenuItem? = nil
- if itemTitles[i] == "" {
- item = NSMenuItem.separator()
- menu.insertItem(item!, at: i)
- } else {
- item = NSMenuItem(title: itemTitles[i], action: nil, keyEquivalent: "")
- item!.target = self
- item!.action = NSSelectorFromString(actions[i])
- if itemTitles[i] == "Paste" {
- item!.action = nil
- } else if itemTitles[i] == "Paste and Match Style" {
- item!.action = nil
- } else if itemTitles[i] == "Add Row Above" {
- let path1 = table.crossLines[table.rowNumber - table.currentCell.row]
- let path2 = table.crossLines[table.rowNumber - table.currentCell.row - 1]
- if (path1 as AnyObject).lineJoinStyle == NSBezierPath.LineJoinStyle.round && table.headerCount() >= 5 {
- item!.action = nil
- } else if (path2 as AnyObject).lineJoinStyle == NSBezierPath.LineJoinStyle.bevel && table.footerCount() >= 5 {
- item!.action = nil
- }
- }
- item!.title = NSLocalizedString(item!.title, comment: "")
- item!.representedObject = NSValue(point: point)
- menu.insertItem(item!, at: i)
- }
- }
- } else {
- let itemTitles = ["Cut", "Copy", "Paste", "Delete"]
- let actions = ["cut:", "copy:", "paste:", "delete:"]
- for i in 0..<itemTitles.count {
- let item = NSMenuItem(title: itemTitles[i], action: nil, keyEquivalent: "")
- item.target = self
- item.action = NSSelectorFromString(actions[i])
- item.title = NSLocalizedString(item.title, comment: "")
- menu.insertItem(item, at: i)
- item.representedObject = NSValue(point: point)
- }
- }
- return menu
- }
-
- private func handleLineAnnotation(_ annotation: CPDFLineAnnotation) {
- if perimeterMeasureInfoWindowController?.window?.isVisible == true {
- perimeterMeasureInfoWindowController?.hideFloatingWindow()
- distanceMeasureInfoWindowController?.showWindow(self)
- } else if areaMeasureInfoWindowController?.window?.isVisible == true {
- areaMeasureInfoWindowController?.hideFloatingWindow()
- distanceMeasureInfoWindowController?.showWindow(self)
- } else if distanceMeasureInfoWindowController?.window?.isVisible == false {
- distanceMeasureInfoWindowController?.showWindow(self)
- }
-
- let measureInfo = annotation.measureInfo
- let startPoint = annotation.startPoint
- let endPoint = annotation.endPoint
- let angle = atan2(endPoint.y - startPoint.y, endPoint.x - startPoint.x) * (180.0 / .pi)
-
- distanceMeasureInfoWindowController?.angleLabel.stringValue = String(format: "%.2f°", abs(angle))
- distanceMeasureInfoWindowController?.xLabel.stringValue = String(format: "%.0f", abs(endPoint.x - startPoint.x))
- distanceMeasureInfoWindowController?.yLabel.stringValue = String(format: "%.0f", abs(endPoint.y - startPoint.y))
- distanceMeasureInfoWindowController?.reloadData(with: measureInfo!)
- }
-
- private func handlePolylineAnnotation(_ annotation: CPDFPolylineAnnotation) {
- if distanceMeasureInfoWindowController?.window?.isVisible == true {
- distanceMeasureInfoWindowController?.hideFloatingWindow()
- perimeterMeasureInfoWindowController?.showWindow(self)
- } else if areaMeasureInfoWindowController?.window?.isVisible == true {
- areaMeasureInfoWindowController?.hideFloatingWindow()
- perimeterMeasureInfoWindowController?.showWindow(self)
- } else if perimeterMeasureInfoWindowController?.window?.isVisible == false {
- perimeterMeasureInfoWindowController?.showWindow(self)
- }
-
- let measureInfo = annotation.measureInfo
- let savePoints = annotation.savePoints()
- var angle: CGFloat = 0
- if savePoints.count >= 3 {
- let count = savePoints.count
- let startPoint = savePoints[count - 3].pointValue
- let midPoint = savePoints[count - 2].pointValue
- let endPoint = savePoints.last!.pointValue
-
- angle = angleBetweenPoints(startPoint, midPoint, endPoint)
- }
- angle = 180 - angle
- perimeterMeasureInfoWindowController?.angleLabel.stringValue = String(format: "%.2f°", abs(angle))
- perimeterMeasureInfoWindowController?.reloadData(with: measureInfo!)
- }
-
- private func handlePolygonAnnotation(_ annotation: CPDFPolygonAnnotation) {
- if distanceMeasureInfoWindowController?.window?.isVisible == true {
- distanceMeasureInfoWindowController?.hideFloatingWindow()
- areaMeasureInfoWindowController?.showWindow(self)
- } else if perimeterMeasureInfoWindowController?.window?.isVisible == true {
- perimeterMeasureInfoWindowController?.hideFloatingWindow()
- areaMeasureInfoWindowController?.showWindow(self)
- } else if areaMeasureInfoWindowController?.window?.isVisible == false {
- areaMeasureInfoWindowController?.showWindow(self)
- }
-
- let measureInfo = annotation.measureInfo
- let savePoints = annotation.savePoints
- var angle: CGFloat = 0
- if savePoints.count >= 3 {
- let count = savePoints.count
- let startPoint = (savePoints[count - 3] as AnyObject).pointValue
- let midPoint = (savePoints[count - 2] as AnyObject).pointValue
- let endPoint = (savePoints.lastObject as AnyObject).pointValue
-
- angle = angleBetweenPoints(startPoint!, midPoint!, endPoint!)
- }
- angle = 180 - angle
- areaMeasureInfoWindowController?.angleLabel.stringValue = String(format: "%.2f°", abs(angle))
- areaMeasureInfoWindowController?.reloadData(measureInfo!)
- }
-
- private func angleBetweenPoints(_ startPoint: CGPoint, _ midPoint: CGPoint, _ endPoint: CGPoint) -> CGFloat {
- let vector1 = CGPoint(x: midPoint.x - startPoint.x, y: midPoint.y - startPoint.y)
- let vector2 = CGPoint(x: endPoint.x - midPoint.x, y: endPoint.y - midPoint.y)
- let dotProduct = vector1.x * vector2.x + vector1.y * vector2.y
- let magnitude1 = sqrt(vector1.x * vector1.x + vector1.y * vector1.y)
- let magnitude2 = sqrt(vector2.x * vector2.x + vector2.y * vector2.y)
-
- return acos(dotProduct / (magnitude1 * magnitude2)) * (180.0 / .pi)
- }
-
-
- @objc func pdfUpdatedFinish() {
- splitPDFController?.inPDFFirst = false
- splitPDFController?.outPDFFirst = false
-
- }
-
- }
- extension KMMainViewController: KMNThumbnailBaseViewDelegate {
- func clickThumbnailViewControlle(pageEditVC:KMNThumbnailBaseViewController?,currentIndex:Int) {
- exitPageEditMode()
- viewManager.isPageEditMode = false
- pdfToolbarController?.reloadPageEditView()
- }
-
- func insertPDFThumbnailViewControlle(pageEditVC: KMNThumbnailBaseViewController?, pdfDocment: CPDFDocument?) {
- if(pdfDocment != nil) {
- insertDocuments.insert(pdfDocment!)
- }
- }
-
- func changeIndexPathsThumbnailViewControlle(pageEditVC: KMNThumbnailBaseViewController?, selectionIndexPaths: Set<IndexPath>, selectionStrings: String) {
- toolbarManager.page_pageInfo_Property.text = selectionStrings
-
- if(toolbarManager.page_pageInfo_Property.creatable == false) {
- toolbarManager.page_pageInfo_Property.creatable = true
- }
- pdfToolbarController?.refreshSecondToolbarItemsState()
- }
-
- }
- extension KMMainViewController: KMNLeftSideViewControllerDelegate {
- func enterPageEditLeftSideViewController(leftSideViewController: KMNLeftSideViewController) {
- if viewManager.isPageEditMode == false {
- viewManager.isPageEditMode = true
- if(pdfToolbarController != nil) {
- kmPDFToolbarControllerDidToolbarItemClicked(pdfToolbarController!, KMPDFToolbar_PageEdit_Identifier)
- pdfToolbarController?.reloadSecondToolbar()
- }
- }
- }
-
- func changeSelectePageLeftSideViewController(leftSideViewController: KMNLeftSideViewController, pageIndex: Int) {
- if(listView.currentPageIndex != pageIndex) {
- listView.go(toPageIndex: pageIndex, animated: true)
- }
- }
-
- func addBookmarkForLeftC(controller: KMNLeftSideViewController, bookmark: CPDFBookmark?, info: [String : Any]?) {
- if let result = info?["result"] as? Bool {
- if result == false {
- let message = KMNCustomAlertView.alertView(message: KMLocalizedString("This page has been bookmarked"), type: .normal_custom, fromView: self.view, point:CGPointMake(self.view.frame.origin.x + self.view.frame.size.width/2, self.view.bounds.size.height - 30))
- }
- }
- }
-
- func switchSearchPopWindow(controller: KMNLeftSideViewController) {
- closeLeftPane()
-
- let handdler = controller.searchViewC.handdler
- showSearchPopWindow(type: handdler.type)
- }
- }
- extension KMMainViewController {
-
- func awakeFromNibFunction() {
- self.addBackgroundMaskView()
-
-
- listView.delegate = self
- listView.pdfListViewDelegate = self
- if (document != nil) {
- self.listView.document = self.document
- self.listView.document?.delegate = self
-
- let autoScale = listView.autoScales
- if !autoScale {
- listView.scaleFactor = 1.0
- }
- }
-
-
- self.initPDFLeftViewVC()
- self.leftSideViewController.mainViewController = self
-
- }
-
- func viewDidAppearFunction() {
-
- if ((KMAdvertisementManager.manager.info.popWindowContent) != nil) {
- if KMAdvertisementManager.manager.info.popWindowContent!.content!.count > 0 {
- let info = KMAdvertisementManager.manager.info.popWindowContent!.content?.first
- if KMAdvertisementManager.checkAdvertisementValid(info!) {
- self.loadRecommondPopWindow()
- }
- }
- }
-
- self.addEventMonitor()
-
- self.view.window?.makeFirstResponder(self.listView)
-
- NotificationCenter.default.post(name: KMInfoWindowC.windowDidBecomeMainNotification, object: self.myDocument)
- self.interfaceThemeDidChanged(self.view.window?.appearance?.name ?? (NSApp.appearance?.name ?? .aqua))
-
- if (self.document == nil) {
- return
- }
-
- if (self.document == nil || self.document!.isLocked == false) {
- self.loadFunctionGuide()
- }
-
- if (self.document?.isLocked == false) {
- if self.model.needConvertNotes && self.tabViewIsDragging() == false {
- self.showConvertNotesProgress()
- }
- return
- }
- if (self.view.window == nil) {
- return
- }
- if (self.model.password != nil) {
- if let data = self.listView.document?.unlock(withPassword: self.model.password), data {
- self.model.isSaveKeyChain = false
- if self.model.needConvertNotes && self.tabViewIsDragging() == false {
- self.showConvertNotesProgress()
- }
- return
- }
- }
-
- DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
- if self.view.window != nil && self.tabViewIsDragging() == false {
- self.passwordWindow = KMPasswordInputWindow.openWindow(window: self.view.window!, url: self.document!.documentURL) { [weak self] result , password in
- if (result == .cancel) {
- (self?.myDocument as? KMMainDocument)?.browser?.closeTab()
- return
- }
- self?.model.isSaveKeyChain = true
- self?.listView.document = self?.document
- self?.document?.unlock(withPassword: password)
- }
- } else {
- if self.model.needConvertNotes && self.tabViewIsDragging() == false {
- self.showConvertNotesProgress()
- }
- }
- }
- }
-
- func viewWillDisappearFunction() {
- if self.interactionMode != .presentation {
- self.removeEventMonitor()
- }
-
- }
-
- func viewWillLayoutFunction() {
- if (KMTools.isFullScreen(self.view.window ?? NSWindow())) {
- self.listView.backgroundColor = KMPreferenceManager.shared.displayBackgroundFullScreenColor
- } else {
- self.listView.backgroundColor = KMPreferenceManager.shared.displayBackgroundNormalColor
- }
- if let guideWC = self.guideInfoWindowController{
- var rect = self.view.window!.frame
- rect.size.height -= 20
- guideWC.window?.setFrame(rect, display: false)
- guideWC.window?.minSize = rect.size
- guideWC.window?.maxSize = rect.size
- guideWC.show()
- }
- }
-
- func viewDidLoadOld() {
- mwcFlags.settingUpWindow = 1
-
- self.srHanddler.pdfView = self.listView
-
- self.initToolbar()
-
- if (UserDefaults.standard.object(forKey: CPDFOfficeLeftSidePaneWidthKey) != nil) {
- UserDefaults.standard.set(256, forKey: CPDFOfficeLeftSidePaneWidthKey)
- UserDefaults.standard.synchronize()
- }
- if (UserDefaults.standard.object(forKey: CPDFOfficeRightSidePaneWidthKey) != nil) {
- UserDefaults.standard.set(256, forKey: CPDFOfficeRightSidePaneWidthKey)
- UserDefaults.standard.synchronize()
- }
-
- if (KMPreferenceManager.shared.openLastUnlockedDocumentWhenAppStart) {
- if (self.listView.document != nil) {
- let pageNumber = KMPreferenceManager.shared.getPageNumber(forKey: self.listView.document?.documentURL.path ?? "")
- let pageScale = KMPreferenceManager.shared.getPageScale(forKey: self.listView.document?.documentURL.path ?? "")
- if (pageNumber != nil && pageNumber! >= 0 && pageNumber! < (self.listView.document?.pageCount ?? 0)) {
- DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
- if (pageScale != nil) {
- self.listView.scaleFactor = CGFloat(pageScale!)
- }
- self.listView.go(toPageIndex: pageNumber!, animated: false)
- }
- } else {
- self._goToFirstPageForFristAppear()
- }
- }
- } else {
- self._goToFirstPageForFristAppear()
- }
-
-
-
-
- NotificationCenter.default.addObserver(self, selector: #selector(rename(_:)), name: NSNotification.Name.init(rawValue: "KMTabControllerRename"), object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(closeTab(_:)), name: NSNotification.Name.init(rawValue: "KMTabControllerCloseTabs"), object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(showInFinder(_:)), name: NSNotification.Name.init(rawValue: "KMTabControllerShowInFinder"), object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(preferenceDidChangeNotification), name: KMPreferenceManager.didChangeNotification, object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(documentDidUnlockNotification), name: Notification.Name("CPDFDocumentDidUnlockNotification"), object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(annotationsAttributeHasChange), name: NSNotification.Name.CPDFListViewAnnotationsAttributeHasChange, object:nil)
- NotificationCenter.default.addObserver(self, selector: #selector(applicationWillTerminateNotification), name: NSApplication.willTerminateNotification, object: nil)
-
- NotificationCenter.default.addObserver(self, selector: #selector(CPDFDocumentPageCountChangedNotification), name: NSNotification.Name.init(rawValue: "CPDFDocumentPageCountChangedNotification"), object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(CEditPDFToolModeChangeStateUnkownNotification), name: Notification.Name.init("CEditPDFToolModeChangeStateUnkown"), object: nil)
-
- NotificationCenter.default.addObserver(self, selector: #selector(handlePageChangedNotification), name: NSNotification.Name.CPDFViewPageChanged, object: self.listView)
- NotificationCenter.default.addObserver(self, selector: #selector(handleDisplayBoxChangedNotification), name: NSNotification.Name.CPDFViewDisplayBoxChanged, object: self.listView)
-
-
- NotificationCenter.default.addObserver(self, selector: #selector(didAddContentViewNotification), name: NSWindow.didAddContentViewNotification, object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(addAutoSaveEvent), name: AutoSaveManager.kTimeValueChangedNotificationName, object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(didRemoveAnnotationNotification), name: NSNotification.Name.CPDFPageDidRemoveAnnotation, object: nil)
-
- Task {
- self.addAutoSaveEvent()
- }
-
- self.toggleCloseRightSide()
-
- self.addKeyEventMonitor()
-
- self.addAdsBannerView()
-
- var snapshotSetups: NSArray?
- if KMPreferenceManager.shared.rememberSnapshot {
- if let fileUrl = (self.myDocument as? KMMainDocument)?.fileURL {
- snapshotSetups = SKBookmarkController.shared().snapshotsForRecentDocument(at: fileUrl) as NSArray?
- }
- }
- if let cnt = snapshotSetups?.count, cnt > 0 {
- if let data = self.listView.document?.isLocked, data {
- self.savedNormalSetup.setObject(snapshotSetups as Any, forKey: "snapshots" as NSCopying)
- } else {
- self.showSnapshots(setups: snapshotSetups)
- }
- }
-
- let readModel = UserDefaults.standard.bool(forKey: "kKMPDFViewIsReadMode")
- if readModel == true {
- self.openPDFReadMode()
- }
-
- let hasWindowSetup = savedNormalSetup.count > 0
- if UserDefaults.standard.dictionary(forKey: KMDefaultPDFDisplaySettingsKey) != nil {
- let pdfSettings: NSDictionary = hasWindowSetup ? savedNormalSetup : UserDefaults.standard.dictionary(forKey: KMDefaultPDFDisplaySettingsKey)! as NSDictionary
- self.applyPDFSettings(pdfSettings)
- } else {
- self.applyPDFSettings(savedNormalSetup)
- }
-
-
- let fontManager = NSFontManager.shared
- fontManager.target = self
- fontManager.action = #selector(changeFont(_:))
-
- }
-
-
-
-
- func initPDFLeftViewVC() {
- var frame = self.leftView.frame
- frame.size.width += 44
- self.leftView.frame = frame
- leftSideViewController.isFirst = true
- leftSideViewController.listView = self.listView
- leftSideViewController.view.frame = CGRect(x: 0, y:0 , width: self.leftView.frame.size.width, height: self.leftView.frame.size.height)
- leftSideViewController.view.autoresizingMask = [.height,.width]
- leftSideViewController.delegate = self
- self.leftView.addSubview(leftSideViewController.view)
- }
-
- func addAdsBannerView() {
- #if VERSION_FREE
- if !IAPProductsManager.default().isAvailableAllFunction(){
- guard let document = self.listView.document else {
- return
- }
- if !document.isLocked {
- }
- NotificationCenter.default.addObserver(self, selector: #selector(purchaseStateUpdateNoti), name: NSNotification.Name(rawValue: "KMIAPProductPurchasedNotification"), object: nil)
- NotificationCenter.default.addObserver(self, selector: #selector(purchaseStateUpdateNoti), name: NSNotification.Name(rawValue: "kDeviceActivateNotification"), object: nil)
-
- }
-
- #endif
-
- }
-
-
-
- private func _isArabicLanguage() -> Bool {
- return NSLocalizedString("Right click a color and select “Change Color...“.", comment: "") == "انقر بزر الماوس الأيمن فوق اللون وحدد \"تغيير اللون...\"."
- }
-
- internal func removeNotifications() {
- NotificationCenter.default.removeObserver(self)
- self.leftSideViewController.clearAnnotationFilterData()
- self.leftSideViewController.clearNotification()
- }
-
- func checkShouldAutoOpenLeftVC() {
- if KMPreference.shared.showLeftSideBar == false {
- return
- }
- if self.model.leftPanelOpen {
- return
- }
- let readModel = UserDefaults.standard.bool(forKey: "kKMPDFViewIsReadMode")
- if readModel == true {
- return
- }
-
- DispatchQueue.main.async {
- self.leftSideViewController.showThumbnail()
- }
- }
-
- func removeAllAnnotations() {
- let alert = NSAlert()
- alert.messageText = NSLocalizedString("This will permanently remove all annotations. Are you sure to continue?", comment: "")
- alert.addButton(withTitle: NSLocalizedString("Yes", comment:""))
- alert.addButton(withTitle: NSLocalizedString("No", comment:""))
- if (alert.runModal() != .alertFirstButtonReturn) {
- return
- }
-
- DispatchQueue.main.async {
- self.removeAllAnnotationsStore.store(t: self.listView)
- }
- }
-
- @objc func cancelMeasureType() {
- self.hideMeasureFloatingWindows()
-
- }
-
- func hideMeasureFloatingWindows() {
- if distanceMeasureInfoWindowController?.window?.isVisible == true {
- distanceMeasureInfoWindowController?.hideFloatingWindow()
- } else if perimeterMeasureInfoWindowController?.window?.isVisible == true {
- perimeterMeasureInfoWindowController?.hideFloatingWindow()
- } else if areaMeasureInfoWindowController?.window?.isVisible == true {
- areaMeasureInfoWindowController?.hideFloatingWindow()
- }
- }
-
- func showMeasureFloatingWindowsIfNeed() {
- let toolMode = self.listView.toolMode
- if toolMode != .measureToolMode {
- return
- }
- let type = self.listView.annotationType
- if type == .line {
- self.distanceMeasureInfoWindowController?.window?.orderFront(nil)
- } else if type == .polyLine {
- self.perimeterMeasureInfoWindowController?.window?.orderFront(nil)
- } else if type == .polyGon {
- self.areaMeasureInfoWindowController?.window?.orderFront(nil)
- } else if type == .square {
- self.areaMeasureInfoWindowController?.window?.orderFront(nil)
- }
- }
-
-
-
-
- func enterRedact() {
- if !IAPProductsManager.default().isAvailableAllFunction(){
- let winC = KMPurchaseCompareWindowController.sharedInstance()
- winC?.kEventName = "Reading_Redact_BuyNow"
- winC?.showWindow(nil)
- return
- }
-
- if self.listView.document?.allowsPrinting == false || self.listView.document?.allowsCopying == false {
- Task {
- _ = await KMAlertTool.runModel(message: KMLocalizedString("This is a secured document. Editing is not permitted."))
- }
- return
- }
-
- if self.hasEnterRedact() {
- self.exitRedact()
- return
- }
-
- self.leftSideViewController.thumbnailTableView.isEnabled = false
- self.leftSideViewController.tocOutlineView.isEnabled = false
- self.leftSideViewController.noteOutlineView.isEnabled = false
- self.leftSideViewController.findTableView.isEnabled = false
- self.leftSideViewController.groupedFindTableView.isEnabled = false
- self.leftSideViewController.snapshotTableView.isEnabled = false
-
-
- let ttsWindowC = KMTTSWindowController.share
- if ttsWindowC.pdfView?.document?.documentURL.path == self.listView.document?.documentURL.path {
- if let data = ttsWindowC.window?.isVisible, data {
- ttsWindowC.stopSpeaking()
- ttsWindowC.close()
- }
- }
- NSColorPanel.shared.showsAlpha = false
-
- redactController = KMPDFRedactViewController(url: self.listView.document!.documentURL, password: self.listView.document?.password)
- self.addChild(redactController)
- redactController.view.autoresizingMask = [.width, .height]
- self.listView.isHidden = true
-
- redactController.scaleFactor = self.listView.scaleFactor
- redactController.titleBack = { [weak self] title in
- self?.view.window?.title = title
- }
- redactController.callback = { [weak self] result, currentPageIndex, saveResult, saveUrl in
- self?.listView.go(toPageIndex: self!.redactController.redactPdfView.currentPageIndex, animated: false)
-
- if result == false {
- self?.exitRedact()
- return
- }
- let controller = self?._getPDFRedactController()
- controller?.redactPdfView.newAddAnnotation.removeAll()
- self?.exitRedact()
- if saveResult {
- let newDocument = CPDFDocument(url: saveUrl)
- if let data = newDocument?.isLocked, data {
- newDocument?.unlock(withPassword: self?.listView.document?.password ?? "")
- }
- self?.document = newDocument
- self?.listView.document = newDocument
- self?.listView.layoutDocumentView()
- }
- }
- redactController.setCurrentPageIndex(self.listView.currentPageIndex)
- }
-
- func exitRedact() {
- self.leftSideViewController.thumbnailTableView.isEnabled = true
- self.leftSideViewController.tocOutlineView.isEnabled = true
- self.leftSideViewController.noteOutlineView.isEnabled = true
- self.leftSideViewController.findTableView.isEnabled = true
- self.leftSideViewController.groupedFindTableView.isEnabled = true
- self.leftSideViewController.snapshotTableView.isEnabled = true
-
- let controller = self._getPDFRedactController()
- if let data = controller {
- if data.redactPdfView.newAddAnnotation.count > 0 {
- KMAlertTool.runModel(message: "", informative: KMLocalizedString("There are unapplied redactions in this file. Exit will not save redaction."), buttons: [KMLocalizedString("Exit"), KMLocalizedString("Cancel")]) { response in
- if response == .alertFirstButtonReturn {
- controller?.redactPdfView.newAddAnnotation.removeAll()
- self.exitRedact()
- }
- }
- return
- }
- }
- NSColorPanel.shared.showsAlpha = true
- controller?.redactPdfView.resignMonitor()
-
- controller?.view.removeFromSuperview()
- controller?.removeFromParent()
-
- self.listView.isHidden = false
- self.listView.annotationType = .unkown
- }
-
- func hasEnterRedact() -> Bool {
- return self._getPDFRedactController() != nil
- }
-
-
-
- func showAITypeChooseView(aiConfigType: AIConfigType) -> Void {
-
- if (self.document != nil) {
- AIChatInfoManager.defaultManager.currentFilePath = (self.document?.documentURL.path)!
- } else {
- AIChatInfoManager.defaultManager.currentFilePath = ""
- }
-
- let windowVC: AINewConfigWindowController = AINewConfigWindowController.currentWC()
- windowVC.chooseCurFileHandle = {[unowned self] windowVC in
- if AIChatInfoManager.defaultManager.currentFilePath.isEmpty == false {
- let documentArray = NSDocumentController.shared.documents
- var didFileEdit: Bool = false
- var curDoc: KMMainDocument!
- for document in documentArray {
- if document.fileURL?.path == AIChatInfoManager.defaultManager.currentFilePath {
- didFileEdit = document.isDocumentEdited
- curDoc = document as! KMMainDocument
- break
- }
- }
- if didFileEdit {
- let tempFileURL = FileManager.default.temporaryDirectory.appendingPathComponent(AIChatInfoManager.defaultManager.currentFilePath.lastPathComponent)
- if FileManager.default.fileExists(atPath: tempFileURL.path) {
- do {
- try FileManager.default.removeItem(at: tempFileURL)
-
- } catch {
-
- }
- }
- if curDoc != nil {
- curDoc.mainViewController?.SaveTempPDFDocumentToURLPath(tempPath: tempFileURL.path)
- }
- }
- windowVC.window?.becomeMain()
- }
- }
- if windowVC.window?.isVisible == true && windowVC.didSetOriginFrame == true {
-
- } else {
- var windowRect = windowVC.window?.frame
- windowRect!.origin.x = NSMaxX(self.view.window!.frame) - (windowRect?.size.width)!
- windowRect!.origin.y = NSMaxY(self.view.window!.frame) - (windowRect?.size.height)! - 64
- windowVC.window?.setFrame(windowRect!, display: true)
-
- windowVC.didSetOriginFrame = true
- }
- windowVC.eventLabel = "AITools_Tbr"
- windowVC.showWindow(nil)
- if (aiConfigType != .none) {
- windowVC.eventLabel = "AITools_Start"
- if self.listView.currentSelection?.string()?.isEmpty == false {
- windowVC.setCurrentPDFSelection(self.listView.currentSelection.string())
- }
- windowVC.chooseAIFunctionWithType(aiConfigType)
- }
- }
-
- @objc func aiTipIconViewShowStateChangeNoti() {
-
- }
-
-
-
- func loadFunctionGuide() -> Void {
- DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
- if self.view.window != nil {
- self.loadOpenFileFunctionGuide(.openFileNormal)
- }
- }
- }
-
-
- func loadOpenFileFunctionGuide(_ showType: KMGuideInfoType) -> Void {
- if showType == .openFileNormal && KMGuideInfoWindowController.availableShow(.openFileNormal) {
-
- self.guideInfoWindowController = KMGuideInfoWindowController.currentWC()
- guard let guideWC = self.guideInfoWindowController else { return }
-
- guideWC.type = .openFileNormal
-
- guideWC.window?.collectionBehavior = [.canJoinAllSpaces]
- guideWC.normalGuideFinishHandle = { [weak self] windowVC in
-
-
- }
- guideWC.finishHandle = { [weak self] windowVC, type in
- if type == .windowNewFinish ||
- type == . windowDigitalFinish {
- self?.checkFirstTrialController()
- }
- }
- guideWC.openFileToggleHandle = { [weak self] windowVC, type in
- self?.checkFirstTrialController()
- }
- var rect = self.view.window!.frame
- rect.size.height -= 20
- guideWC.window?.setFrame(rect, display: false)
- guideWC.window?.minSize = rect.size
- guideWC.window?.maxSize = rect.size
- self.view.window?.addChildWindow(guideWC.window!, ordered: .above)
- guideWC.show()
- } else if showType == .digitalSignGuide && KMGuideInfoWindowController.availableShow(.digitalSignGuide) {
- self.guideInfoWindowController = KMGuideInfoWindowController.currentWC()
- guard let guideWC = self.guideInfoWindowController else { return }
-
- guideWC.type = .digitalSignGuide
-
- guideWC.window?.collectionBehavior = [.canJoinAllSpaces]
- guideWC.finishHandle = { [weak self] windowVC, type in
- self?.checkFirstTrialController()
- }
- var rect = self.view.window!.frame
- rect.size.height -= 20
- guideWC.window?.setFrame(rect, display: false)
- guideWC.window?.minSize = rect.size
- guideWC.window?.maxSize = rect.size
- self.view.window?.addChildWindow(guideWC.window!, ordered: .above)
- guideWC.show()
-
- } else if showType == .pdfCompareGuide && KMGuideInfoWindowController.availableShow(.pdfCompareGuide) {
- DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2) {
- self.guideInfoWindowController = KMGuideInfoWindowController.currentWC()
- guard let guideWC = self.guideInfoWindowController else { return }
-
- guideWC.type = .pdfCompareGuide
-
-
- guard let win = self.view.window else {
- return
- }
-
- guideWC.finishHandle = { [weak self] winC, type in
- if type == .windowNewFinish {
- DispatchQueue.main.async {
- self?.loadOpenFileFunctionGuide(.measureGuide)
- }
- return
- }
- }
-
- guideWC.window?.collectionBehavior = [.canJoinAllSpaces]
- var rect = self.view.window!.frame
- rect.size.height -= 20
- guideWC.window?.setFrame(rect, display: false)
- guideWC.window?.minSize = rect.size
- guideWC.window?.maxSize = rect.size
- self.view.window?.addChildWindow(guideWC.window!, ordered: .above)
- guideWC.show()
- }
- } else if showType == .measureGuide && KMGuideInfoWindowController.availableShow(.measureGuide) {
- DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.2) {
- self.guideInfoWindowController = KMGuideInfoWindowController.currentWC()
- guard let guideWC = self.guideInfoWindowController else { return }
- guard let _ = self.view.window else {
- return
- }
-
- guideWC.type = .measureGuide
-
- guideWC.window?.collectionBehavior = [.canJoinAllSpaces]
- var rect = self.view.window?.frame ?? .zero
- rect.size.height -= 20
- guideWC.window?.setFrame(rect, display: false)
- guideWC.window?.minSize = rect.size
- guideWC.window?.maxSize = rect.size
- self.view.window?.addChildWindow(guideWC.window!, ordered: .above)
- guideWC.show()
- }
- } else if showType == .convertGuide && KMGuideInfoWindowController.availableShow(.convertGuide) {
- DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
- self.guideInfoWindowController = KMGuideInfoWindowController.currentWC()
- guard let guideWC = self.guideInfoWindowController else { return }
-
- guideWC.type = .convertGuide
- guard let win = self.view.window else {
- return
- }
- guideWC.purchaseHandle = { [weak self] windowVC in
- #if VERSION_DMG
- if IAPProductsManager.default().isAvailableAllFunction() {
- if IAPProductsManager.default().isAvailableAdvancedPDFToOffice() {
-
- self?.showAllConvertWindow(convertT: .Word)
- } else {
- let limitWC = KMPurchaseLimitWindowController.currentLimitWC()
- limitWC.continueBlock = { windowController in
-
- }
- limitWC.window?.center()
- limitWC.showWindow(nil)
- }
- } else {
- KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
- }
- #else
- if IAPProductsManager.default().isAvailableAllFunction() {
- if IAPProductsManager.default().isAvailableAdvancedPDFToOffice() {
-
- } else {
- var vc = KMToolCompareWindowController(toolType: .Convert, selectNum: 1)
- vc.showWindow(nil)
- }
- } else {
- KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
- }
- #endif
- }
-
- guideWC.window?.collectionBehavior = [.canJoinAllSpaces]
- var rect = self.view.window?.frame ?? .zero
- rect.size.height -= 20
- guideWC.window?.setFrame(rect, display: false)
- guideWC.window?.minSize = rect.size
- guideWC.window?.maxSize = rect.size
- self.view.window?.addChildWindow(guideWC.window!, ordered: .above)
- guideWC.show()
- }
- } else {
-
- }
- }
-
- func checkFirstTrialController() -> Void {
- #if VERSION_DMG
-
- if VerificationManager.default().status == .none {
- let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""
- let lastVersion = UserDefaults.standard.object(forKey: "SKLastTrialVersionMainDocumentLaunchedKey") as? String ?? ""
- if lastVersion.isEmpty || lastVersion != appVersion {
- UserDefaults.standard.setValue(appVersion, forKey: "SKLastTrialVersionMainDocumentLaunchedKey")
- UserDefaults.standard.synchronize()
- KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
- }
- }
- #endif
- }
-
-
-
- open func enterPageEdit(_ pages: [Int] = []) {
- if let doc = self.listView.document {
- if doc.allowsCopying == false || doc.allowsPrinting == false {
- KMBaseWindowController.checkPassword(url: doc.documentURL, type: .owner) { result, pwd in
- if result && pwd.isEmpty == false {
- self.listView.document?.unlock(withPassword: pwd)
-
- Task { @MainActor in
- self.enterPageEdit(pages)
- }
- } else {
- self.exitPageEdit()
- }
- }
- return
- }
- }
-
- var tPages = pages
- if tPages.count == 0 {
- if self.leftSideViewController.type.methodType == .Thumbnail {
- tPages = self.leftSideViewController.thumb_fetchSelectedRows() ?? [self.listView.currentPageIndex]
- }
- }
-
- if (hasEnterPageEdit()) {
- exitPageEdit()
- return
- }
-
-
-
-
- let controller = KMPDFEditViewController(self.listView.document)
-
- controller.selectedPages = tPages
- controller.listView = self.listView
- self.addChild(controller)
-
- controller.view.autoresizingMask = [.width,.height]
- self.listView.isHidden = true
-
- controller.itemClick = { [weak self] index, params in
- if (index == 1) {
- self?.enterEditMode(self!.leftSideViewController, [])
- DispatchQueue.main.async {
- let pageIndex: Int = params.first as! Int
- self?.listView.go(toPageIndex: pageIndex, animated: true)
- }
- } else if (index == 2) {
- self?.showPrintWindow(pageRange: KMPrintPageRange(type: .custom, selectPages: params.first as! [Int]))
- }
- }
- controller.documentEditedCallback = { [weak self] params in
- self?.recordIsPDFDocumentEdited()
- }
-
- controller.selectionDidChange = { selectedIndexs in
- var indexSet = IndexSet()
- for indexPath in selectedIndexs {
- indexSet.insert(indexPath.item)
- }
- if indexSet.count != 0 {
- }
- }
- }
-
- open func exitPageEdit() {
-
- let editController = getPDFEditController()
- if (editController == nil) {
- return
- }
- self.listView.annotationType = .highlight
-
-
- self.leftSideViewController.model.insertedDocumentSet.formUnion(editController?.model.insertedDocumentSet ?? [])
-
- editController?.view.removeFromSuperview()
- editController?.removeFromParent()
-
- self.listView.isHidden = false
- self.listView.layoutDocumentView()
- self.view.window?.makeFirstResponder(self.listView)
-
- self.listView.annotationType = .unkown
-
- self.listView.go(toPageIndex: editController!.listViewCurrentIndex, animated: false)
-
- if let data = editController?.isEdited, data {
- self.leftSideViewController.reloadThumbnailDataIfNeed()
- self.leftSideViewController.note_reloadDataIfNeed()
- self.leftSideViewController.refreshUIOfOutlineIfNeed()
- self.leftSideViewController.refreshUIOfSeachListIfNeed()
- self.leftSideViewController.refreshUIOfBookmarkIfNeed()
- }
- }
-
- open func hasEnterPageEdit() -> Bool {
- return self.getPDFEditController() != nil
- }
-
-
-
-
- func hasShowDigitalSign() -> Bool {
- return self.digitalSignController?.view.superview != nil
- }
-
- func canEnterDigitalSign() -> Bool {
- guard let doc = self.listView.document else {
- return false
- }
- return doc.allowsPrinting && doc.allowsCopying
- }
-
- func enterDigitalSign() {
- self.listView.toolMode = .textToolMode
- if self.hasShowDigitalSign() {
- self.exitDigitalSign()
- } else {
- if self.needSaveDocument() {
- self.saveDocumentWithProgressAlert { [unowned self] params in
- if (self.listView.document != nil) {
- self.showDigitalSignWindow(withFilePathURL: self.listView.document.documentURL)
- }
- }
- return
- }
- if (self.listView.document != nil) {
- self.showDigitalSignWindow(withFilePathURL: self.listView.document.documentURL)
- }
- }
- }
-
- func exitDigitalSign() {
- self.digitalSignController?.view.removeFromSuperview()
-
-
- }
-
- func showDigitalSignWindow(withFilePathURL fileURL: URL) {
- if !IAPProductsManager.default().isAvailableAllFunction(){
- let winC = KMPurchaseCompareWindowController.sharedInstance()
- winC?.kEventName = "Reading_DigitalSign_BuyNow"
- winC?.showWindow(nil)
- return
- }
-
- if hasShowDigitalSign() {
- self.exitDigitalSign()
- }
-
- var currentPageIndex = listView.document?.index(for: listView.currentPage()) ?? 0
- var password: String = ""
-
- password = listView.document?.password ?? ""
-
- digitalSignController = KMPDFDigitalSignViewController()
-
- digitalSignController?.currentPageIndex = Int(currentPageIndex)
- digitalSignController?.url = listView.document?.documentURL
- digitalSignController?.password = password
- digitalSignController?.scaleFactor = listView.scaleFactor
-
- digitalSignController?.titleChangeBlock = { title, index in
- currentPageIndex = UInt(index)
- }
-
- digitalSignController?.buttonActionBlock = { [weak self] type, isChanged in
- if type == .cancel {
- if let page = self?.listView.document?.page(at: currentPageIndex) {
- self?.listView.go(to: page)
- }
- self?.exitDigitalSign()
- }
- }
-
- }
-
-
-
- func toolbarItemClickForExitMode(_ toolbarItem: KMToolbarItemView) {
- if(toolbarItem.itemIdentifier != KMDocumentPageToolbarItemIdentifier) {
- if (hasEnterPageEdit()) {
- self.exitPageEdit()
- }
- }
- if toolbarItem.itemIdentifier != KMDocumentRedactToolbarItemIdentifier {
- if self.hasEnterRedact() {
- self.exitRedact()
- }
- }
- if toolbarItem.itemIdentifier != KMDocumentDigitalSignToolbarItemIdentifier {
- if self.hasShowDigitalSign() {
- self.exitDigitalSign()
- }
- }
- if toolbarItem.itemIdentifier != KMDocumentEditToolbarItemIdentifier && toolbarItem.itemIdentifier != KMRightControlToolbarItemIdentifier && toolbarItem.itemIdentifier != KMLeftControlToolbarItemIdentifier {
-
- }
- }
-
-
-
- private func getPDFEditController() -> KMPDFEditViewController? {
- var editController: KMPDFEditViewController?
- for controller in self.children {
- if (controller.isKind(of: KMPDFEditViewController.self)) {
- editController = (controller as! KMPDFEditViewController)
- break
- }
- }
- return editController
- }
-
- private func _getPDFRedactController() -> KMPDFRedactViewController? {
- var controller: KMPDFRedactViewController?
- for childC in self.children {
- if (childC.isKind(of: KMPDFRedactViewController.self)) {
- controller = (childC as! KMPDFRedactViewController)
- break
- }
- }
- return controller
- }
-
- private func addBackgroundMaskView() {
- self.removeBackgroundMaskView()
-
-
- }
-
- private func removeBackgroundMaskView() {
-
- }
-
- private func _goToFirstPageForFristAppear() {
- DispatchQueue.main.asyncAfter(wallDeadline: .now()+0.1) {
- self.listView.go(toPageIndex: 0, animated: false)
- }
- }
-
- func isPDFPageCountExceedsLimit(filePath: String) -> Bool {
- let url = URL(fileURLWithPath: filePath)
- guard let document = PDFDocument(url: url) else {
- return false
- }
-
- let pageCount = document.pageCount
- return pageCount > 30
- }
-
-
-
- func exeRedactConfirm(_ type: KMRedactConfirmType, callback: @escaping () -> ()?) {
- let windowController = KMRedactConfirmWindowController(type)
- self.currentWindowController = windowController
- self.view.window?.beginSheet(windowController.window!)
- windowController.itemClick = { [weak self] index in
- if (index == 2) {
- self?.view.window?.endSheet((self?.currentWindowController.window)!)
- self?.currentWindowController = nil
- callback()
- return
- }
-
- self?.view.window?.endSheet((self?.currentWindowController.window)!)
- self?.currentWindowController = nil
-
- let panel = NSSavePanel()
- panel.nameFieldStringValue = "[新文件]"+((self?.listView.document?.documentURL.lastPathComponent) ?? "")
- let button = NSButton.init(checkboxWithTitle: "保存后打开文档", target: nil, action: nil)
- button.state = .on
- panel.accessoryView = button
- panel.isExtensionHidden = true
- panel.beginSheetModal(for: (self?.view.window!)!) { response in
- if response != .OK {
- callback()
- return
- }
-
- if (type == .redactOne) {
- let anno = self!.listView.activeAnnotation
- if (anno == nil || (anno?.isKind(of: CPDFRedactAnnotation.self)) == false) {
- callback()
- return
- }
-
- (anno as! CPDFRedactAnnotation).applyRedaction()
- } else if (type == .redactAll) {
- self?.listView.document?.applyRedactions()
- } else if (type == .eraserOne) {
- let anno = self!.listView.activeAnnotation
- if (anno == nil || (anno?.isKind(of: CPDFRedactAnnotation.self)) == false) {
- callback()
- return
- }
-
- anno?.page.erasureRedact(from: anno!.bounds)
- } else if (type == .eraserAll) {
- KMRedactTools.eraserDocument((self?.listView.document)!) { result, errorAnno in
- if (result == false) {
- callback()
- return
- }
- }
- }
-
- self!.listView.document?.write(to: panel.url)
- if (button.state == .on) {
- NSDocumentController.shared.openDocument(withContentsOf: panel.url!, display: true) { document, alreadyOpen, error in
-
- }
- } else {
- NSWorkspace.shared.activateFileViewerSelecting([panel.url!])
- }
- callback()
- }
- }
- }
-
-
-
- public func showSecureLimitTip() {
- self.hiddenSecureLimitTip()
-
- if self.secureAlertView == nil {
- self.secureAlertView = KMSecureAlertView()
- self.secureAlertView?.show(in: self.listView)
- self.secureAlertView?.closeAction = { [unowned self] view in
- self.hiddenSecureLimitTip()
-
- self.removeFromAlertView()
- self.showFormAlertView()
- }
-
- self.secureAlertView?.passwordAction = { [unowned self] view in
- self.removeOwnerPassword()
-
- self.removeFromAlertView()
- self.showFormAlertView()
- }
- }
- }
-
- func removeOwnerPassword() {
- guard let doc = self.listView.document else {
- NSSound.beep()
- return
- }
- if doc.allowsCopying && doc.allowsPrinting {
- NSSound.beep()
- return
- }
- _ = KMPasswordInputWindow.openWindow(window: self.view.window!, type: .owner, url: doc.documentURL) { [weak self] result, password in
- if result == .cancel {
- return
- }
-
- self?.hiddenSecureLimitTip()
- self?.model.isSaveKeyChain = false
- self?.listView.document?.unlock(withPassword: password)
- }
- }
-
- public func hiddenSecureLimitTip() {
- self.secureAlertView?.removeFromSuperview()
- self.secureAlertView = nil
- }
-
-
-
- func showFormAlertView() {
- if (formAlertView == nil) {
- formAlertView = KMFormAlertView()
- formAlertView?.isCloseSecureView = self.secureAlertView != nil ? false : true
- formAlertView?.showInView(self.listView)
- } else {
- self.removeFromAlertView()
- }
- }
-
- func removeFromAlertView() {
- formAlertView?.removeFromSuperview()
- formAlertView = nil
- }
-
- override func mouseMoved(with event: NSEvent) {
- self.view.window?.mouseMoved(with: event)
- }
-
- func savePageNumberIfNeed() {
- if (KMPreferenceManager.shared.openLastUnlockedDocumentWhenAppStart) {
- let scaleFactor = self.listView.scaleFactor ?? 0
- if scaleFactor <= 0 {
- return
- }
- if self.listView.document != nil {
- KMPreferenceManager.shared.setPageNumber(self.listView.currentPageIndex, forKey: self.listView.document.documentURL.path)
- KMPreferenceManager.shared.setPageScale(Float(self.listView.scaleFactor), forKey: self.listView.document.documentURL.path)
- }
- }
- }
-
-
-
- public func showMergeWindow(url: URL? = nil, _ password: String?) {
- DispatchQueue.main.async {
- var documentURL = url
- if documentURL == nil {
- documentURL = self.listView.document?.documentURL
- }
-
- guard let _url = documentURL else { return }
- guard let document = PDFDocument(url: _url) else { return }
-
- self.mergeWindowController = KMMergeWindowController(document: document, password: password ?? "")
- self.mergeWindowController!.oriDucumentUrl = self.listView.document?.documentURL
- self.mergeWindowController!.pageIndex = self.listView.currentPageIndex
-
- self.mergeWindowController!.cancelAction = { [unowned self] controller in
- self.view.window?.endSheet(mergeWindowController!.window!)
- }
-
- self.mergeWindowController!.mergeAction = { [unowned self] controller, filePath in
- self.view.window?.endSheet(mergeWindowController!.window!)
- }
-
- self.view.window?.beginSheet(self.mergeWindowController!.window!)
- }
- }
-
-
-
- public func showSecureWindow(_ url: URL) {
- self.securityWindowController = KMSecurityWindowController(windowNibName: "KMSecurityWindowController")
- guard let securityWindowController = securityWindowController else { return }
-
- securityWindowController.documentURL = self.listView.document?.documentURL
- securityWindowController.batchAction = { [unowned self] controller, files in
- self.view.window?.endSheet((securityWindowController.window)!)
-
-
- let batchWindowController = KMBatchOperateWindowController.sharedWindowController
- let batchOperateFile = KMBatchOperateFile(filePath: self.document?.documentURL.path ?? "", type: .AddPassword)
- batchWindowController.switchToOperateType(.AddPassword, files: [batchOperateFile])
- batchWindowController.window?.makeKeyAndOrderFront("")
- }
-
- securityWindowController.doneAction = { [unowned self] controller, options, attribute in
- let openPanel = NSOpenPanel()
- openPanel.canChooseFiles = false
- openPanel.canChooseDirectories = true
- openPanel.canCreateDirectories = true
- openPanel.beginSheetModal(for: NSWindow.currentWindow()) { (result) in
- if result == NSApplication.ModalResponse.OK {
- for fileURL in openPanel.urls {
- let document = CPDFDocument(url: self.document?.documentURL)
- if document != nil {
- document!.setDocumentAttributes(attribute)
-
- let path = fileURL.path.stringByAppendingPathComponent(url.deletingPathExtension().lastPathComponent) + "_SetPassword" + "." + url.pathExtension
- let success = document!.write(to: NSURL(fileURLWithPath: path) as URL, withOptions: options)
- if success {
- self.view.window?.endSheet((securityWindowController.window)!)
-
- NSWorkspace.shared.activateFileViewerSelecting([URL(fileURLWithPath: path)])
- }
- }
- }
- }
- }
- }
-
- securityWindowController.cancelAction = { [unowned self] controller in
- self.view.window?.endSheet((securityWindowController.window)!)
- }
- NSWindow.currentWindow().beginSheet(securityWindowController.window!)
- }
-
-
-
- internal func needSaveDocument() -> Bool {
- if (self.isPDFDocumentEdited) {
- return self.isPDFDocumentEdited
- }
- if (self.needSave) {
- return self.needSave
- }
-
- let document: KMMainDocument? = self.myDocument as? KMMainDocument
- if (document?.isDocumentEdited == nil || document?.isDocumentEdited == false) {
- return false
- }
- return true
- }
-
- internal func saveDocument(overlookDocumentIfEdited overlook: Bool = false) {
- let document: KMMainDocument? = self.myDocument as? KMMainDocument
- if (overlook) {
- document?.save(nil)
- return
- }
- if (self.isPDFDocumentEdited) {
- self.clearIsPDFDocumentEdited()
- self.needSave = false
- document?.save(nil)
- return
- }
- if (document?.isDocumentEdited == nil || document?.isDocumentEdited == false) {
- return
- }
-
- document?.save(nil)
- }
-
- internal func asyncSaveDocument(overlookDocumentIfEdited overlook: Bool = false, callback:@escaping KMCommonBlock) {
- let document: KMMainDocument? = self.myDocument as? KMMainDocument
- if (overlook) {
- DispatchQueue.main.async {
- document?.save(nil)
- callback()
- }
- return
- }
- if (self.isPDFDocumentEdited) {
- self.clearIsPDFDocumentEdited()
- self.needSave = false
- DispatchQueue.main.async {
- document?.save(nil)
- callback()
- }
- return
- }
- if (document?.isDocumentEdited == nil || document?.isDocumentEdited == false) {
- callback()
- return
- }
-
- DispatchQueue.main.async {
- document?.save(nil)
- callback()
- }
- }
-
- internal func saveDocumentWithProgressAlert(callback:@escaping KMCommonBlock) {
-
- AutoSaveManager.manager.isSaving = true
- self.showProgressWindow(message: NSLocalizedString("Save", comment: "") + "PDF")
- self.progressC?.maxValue = 3.0
- self.progressC?.increment(by: 1.0)
-
- self.asyncSaveDocument { [weak self] params in
-
- self?.progressC?.increment(by: 1.0)
- self?.progressC?.increment(by: 1.0)
-
- DispatchQueue.main.asyncAfter(deadline: .now()+0.1) {
-
- self?.hiddenProgressWindow()
- DispatchQueue.main.asyncAfter(deadline: .now()+1) {
- AutoSaveManager.manager.isSaving = false
- }
-
- callback()
- }
- }
- }
- func SaveTempPDFDocumentToURLPath(tempPath: String) {
- self.document?.write(toFile: tempPath)
- }
-
-
-
- func addAutoSaveEvent() {
- if (self.autoSaveTimer != nil) {
- self.autoSaveTimer?.invalidate()
- self.autoSaveTimer = nil
- }
-
- if self.document != nil {
- self.autoSaveTimer = Timer.scheduledTimer(withTimeInterval: AutoSaveManager.manager.timeInterval * 60, repeats: true, block: { [weak self] timer in
- self?.autoSaveTimerAction(timer)
- })
- }
- self.checkAutoSaveInfo()
- }
-
- func checkAutoSaveInfo() {
- guard let cnt = AutoSaveManager.manager.autoSavePaths?.count, cnt > 0 else {
- return
- }
- if AutoSaveManager.manager.autoSaveAlertShow {
- return
- }
-
- AutoSaveManager.manager.autoSaveDidEndAction = false
- AutoSaveManager.manager.autoSaveAlertShow = true
-
- let blockSaveWindow = AutoSavePopController()
- blockSaveWindow.cancelHandle = { [weak self] windowController in
- AutoSaveManager.manager.autoSaveDidEndAction = true
- AutoSaveManager.manager.clearCache()
- self?.km_quick_endSheet()
- }
-
- blockSaveWindow.confirmHandle = { [weak self] windowController in
- self?.km_quick_endSheet()
- self?.saveAutoSaveInfo()
- }
- self.km_beginSheet(windowC: blockSaveWindow)
- }
-
- func saveAutoSaveInfo() {
- let openPanel = NSOpenPanel()
- openPanel.canChooseDirectories = true
- openPanel.canChooseFiles = false
- openPanel.allowsMultipleSelection = false
- let win = NSApp.keyWindow != nil ? NSApp.keyWindow : self.view.window
- openPanel.beginSheetModal(for: win!) { result in
- if (result == .OK) {
- let folderPath = openPanel.url?.path ?? openPanel.url?.absoluteString
- for path in AutoSaveManager.manager.opendPaths ?? [] {
- let _path = path as? String
- var newPath = "\(folderPath ?? "")/\(_path?.lastPathComponent ?? "")"
- newPath = self.getValidFilePath(newPath)
- do {
- try FileManager.default.moveItem(atPath: _path ?? "", toPath: newPath)
- } catch {
- NSWorkspace.shared.activateFileViewerSelecting([URL(fileURLWithPath: newPath)])
- }
- }
- AutoSaveManager.manager.clearCache()
- }
- AutoSaveManager.manager.autoSaveDidEndAction = true
- }
- }
-
- func autoSaveTimerAction(_ timer: Timer) {
- if (self.document == nil || self.listView.document?.documentURL.path == nil) {
- return
- }
- if AutoSaveManager.manager.autoSaveDidEndAction == false {
-
- return
- }
-
- if let data = self.document?.isLocked, data {
- return
- }
-
- if AutoSaveManager.manager.autoSaveEnabled == false {
- return
- }
-
- let documentArray = NSDocumentController.shared.documents
- var didFileEdit = false
- for doc in documentArray {
- if doc.fileURL?.path == self.document?.documentURL.path {
- didFileEdit = doc.isDocumentEdited
- break
- }
- }
- if (didFileEdit == false) {
- return
- }
-
- AutoSaveManager.manager.isSaving = true
- let savePath = AutoSaveManager.manager.autoSaveWithPath(self.listView.document?.documentURL.path ?? "")
- if (!self.document!.isLocked) {
- self.document?.write(to: URL(fileURLWithPath: savePath))
- }
- DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
- AutoSaveManager.manager.isSaving = false
- }
- }
-
- func removeAutoSaveInfo() {
- if self.autoSaveTimer != nil {
- self.autoSaveTimer?.invalidate()
- self.autoSaveTimer = nil
- }
-
- if AutoSaveManager.manager.autoSaveDidEndAction == false {
-
- return
- }
- if AutoSaveManager.manager.autoSaveEnabled == false {
- return
- }
-
- if self.document == nil || self.listView.document?.documentURL.path == nil {
- return
- }
- AutoSaveManager.manager.removeAutoSavePath(self.listView.document?.documentURL.path ?? "")
- }
-
-
- public func setPDFDisplay(pdfViewMode: CPDFDisplayViewMode) {
- listView.setDisplay(pdfViewMode)
-
- }
-
-
-
- @objc public func selectZoom(_ type: KMPDFZoomType) {
- switch type {
- case .width:
- self.listView.autoScales = true
- break
- case .fit:
- if let pageHeight = self.listView.currentPage()?.size.height, pageHeight > 0 {
- let pdfviewHeight = self.listView.bounds.size.height
- self.listView.scaleFactor = pdfviewHeight/pageHeight
- self.listView.autoScales = false
- }
-
- break
- case .actualSize:
- if self.listView.scaleFactor != 1.0 {
- self.listView.scaleFactor = 1.0
- self.listView.autoScales = false
- }
- break
- }
- }
-
- internal func createPdf(index:Int) {
-
- }
-
-
-
- private func addEventMonitor() {
- if (self.eventMonitor != nil) {
- self.removeEventMonitor()
- }
-
- self.eventMonitor = NSEvent.addLocalMonitorForEvents(matching: [.scrollWheel, .leftMouseDown, .leftMouseUp]) { [weak self] event in
- if (event.type == .scrollWheel && event.modifierFlags.contains(.option)) {
- self?.listView.magnifyWheel(event)
- return nil
- } else if event.type == .leftMouseDown {
- let point = event.locationInView(self?.listView ?? NSView())
- let presentationDrawView = self?.listView.presentationDrawView
- if let data = self?.interactionMode, data == .presentation,CGRectContainsPoint(self?.listView.frame ?? .zero, point),presentationDrawView?.isHidden == true {
- if point.x >= (self?.listView.frame.maxX ?? 0) / 2 {
- let can = self?.listView.canGoToNextPage() ?? false
- if can {
- self?.listView.goToNextPage(nil)
- }
- } else {
- let can = self?.listView.canGoToPreviousPage() ?? false
- if can {
- self?.listView.goToPreviousPage(nil)
- }
- }
-
- return nil
- }
- }
- return event
- }
- }
-
- func addKeyEventMonitor() {
- if (self.keyEventMonitor != nil) {
- self.removeKeyEventMonitor()
- }
- keyEventMonitor = NSEvent.addLocalMonitorForEvents(matching: .keyDown) { [weak self] event in
- if event.keyCode == 53 {
- if let data = self?.interactionMode, data == .presentation {
- self?.exitFullScreen()
- return event
- }
- if self?.listView.toolMode == .editPDFToolMode {
- if self != nil {
-
- if self!.listView.editingAreas() != nil {
- if self!.listView.editingAreas().count > 0 && self!.listView.isEditable() {
- self!.listView.clearEditingSelectCharItem()
- } else if self!.listView.editingAreas().count > 0 {
- if self?.listView.annotationType == .addImage ||
- self?.listView.annotationType == .addText {
- }
- self?.listView.endEditIsRemoveBlock(with: self!.listView.editingAreas().first as? CPDFEditArea)
- self?.listView.updateEditing([])
- self?.listView.isEditImage = false
- self?.listView.setNeedsDisplayPageViewFor(self!.listView.currentPage())
- if self?.listView.annotationType == .addImage {
- self?.listView.change([.text, .image])
- }
- self?.listView.annotationType = .editTextImage
- self?.toggleCloseRightSide()
- } else if(self?.listView.annotationType == .addImage || self!.listView.annotationType == .addText) {
- if self?.listView.annotationType == .addImage ||
- self?.listView.annotationType == .addText {
- }
- self?.listView.setShouAddEdit([])
- self?.listView.change([.text, .image])
- self?.listView.annotationType = .editTextImage
- self?.toggleCloseRightSide()
- }
-
- } else {
- if self?.listView.annotationType == .addImage ||
- self?.listView.annotationType == .addText {
- }
- }
- }
- }
- } else {
- if let data = self?.interactionMode, data == .presentation {
- self?.listView.keyDown(with: event)
- return event
- } else {
- let cmd = event.modifierFlags.contains(.command)
- let shift = event.modifierFlags.contains(.shift)
- if event.keyCode == 6 {
- let editPDFIng = self?.listView.isEditing() ?? false
- if cmd && shift {
- let can = self?.listView.canEditTextRedo() ?? false
- if can == false {
- return event
- }
- if editPDFIng {
- _ = CustomAlertView.alertView(message: NSLocalizedString("Redo", comment: ""), fromView: self!.view, withStyle: .black)
-
- }
- } else if cmd {
- let can = self?.listView.canEditTextUndo() ?? false
- if can == false {
- return event
- }
- if editPDFIng {
- _ = CustomAlertView.alertView(message: NSLocalizedString("Undo", comment: ""), fromView: self!.view, withStyle: .black)
-
- }
- }
- }
- }
- }
- return event
- }
- }
-
- func removeKeyEventMonitor() {
- if (self.keyEventMonitor != nil) {
- KMPrint("removeKeyEventMonitor 已移除事件监听")
-
- NSEvent.removeMonitor(self.keyEventMonitor as Any)
- self.keyEventMonitor = nil
- }
- }
-
- private func removeEventMonitor() {
- if (self.eventMonitor != nil) {
- KMPrint("已移除事件监听")
-
- NSEvent.removeMonitor(self.eventMonitor as Any)
- self.eventMonitor = nil
- }
- }
-
-
-
- func pdfViewCanHorizontalScroll() -> Bool {
- let scroll = self.listView.scroll()
- if (scroll == nil) {
- return false
- }
-
- return scroll?.horizontalScroller?.isHidden == nil ? false : !(scroll!.horizontalScroller!.isHidden)
- }
-
- func pdfViewCanVerticalScroll() -> Bool {
- let scroll = self.listView.scroll()
- if (scroll == nil) {
- return false
- }
-
- return scroll?.verticalScroller?.isHidden == nil ? false : !(scroll!.verticalScroller!.isHidden)
- }
-
-
-
- public func clearData() {
- KMThumbnailCache.shared.clearCache()
-
- self.removeNotifications()
- if (self.listView.spellingTag() > 0) {
- NSSpellChecker.shared.closeSpellDocument(withTag: self.listView.spellingTag())
- }
- self.removeAutoSaveInfo()
-
- self.myDocument = nil
-
- }
-
- public func clearSecureOptions() {
- self._secureOptions = nil
- self.documentAttribute = nil
- }
-
- public func recordRemoveSecureFlag() {
- self._removeSecureFlag = true
- self.clearSecureOptions()
- self.recordIsPDFDocumentEdited(type: .removePassword)
- self._needSave = true
- }
-
- public func clearRemoveSecureFlag() {
- self._removeSecureFlag = false
- }
-
- public func clearSaveWatermarkFlag() {
- km_synchronized(self) {
- self._saveWatermarkFlag = false
- }
- }
-
- public func recordIsPDFDocumentEdited(type: KMSubscribeWaterMarkType = .none) {
- km_synchronized(self) {
- self.model.isPDFDocumentEdited = true
-
- if type == .editText || type == .editImage {
- self.leftSideViewController.updateThumbnail(at: self.listView.currentPageIndex)
- }
-
- if let _document = self.myDocument {
- KMTools.setDocumentEditedState(document: _document)
- }
- }
- }
-
- public func clearIsPDFDocumentEdited() {
- km_synchronized(self) {
- self.model.isPDFDocumentEdited = false
- }
- }
-
- func showSnapshots(setups: NSArray?) {
- if self.listView.document != nil {
- for setup in setups ?? [] {
- let swc = KMSnapshotWindowController()
- swc.delegate = self
- swc.setPdfDocument(self.listView.document, setup: setup as? NSDictionary)
- swc.setForceOnTop(self.interactionMode != .normal)
- self.myDocument?.addWindowController(swc)
- }
- }
- }
-
- func dealDocumentDidLoaded() {
- self.removeBackgroundMaskView()
- if (!self.listView.document!.allowsCopying || !self.listView.document!.allowsPrinting) {
- self.showSecureLimitTip()
- }
-
- if self.model.needConvertNotes {
- self.showConvertNotesProgress()
- }
- if (self._documentFirstLoad) {
- self.checkShouldAutoOpenLeftVC()
- if (KMPreferenceManager.shared.openLastUnlockedDocumentWhenAppStart) {
- let pageNumber = KMPreferenceManager.shared.getPageNumber(forKey: self.listView.document?.documentURL.path ?? "")
- let pageScale = KMPreferenceManager.shared.getPageScale(forKey: self.listView.document?.documentURL.path ?? "")
- if (pageScale != nil) {
- self.listView.scaleFactor = CGFloat(pageScale!)
- }
- if (pageNumber != nil && pageNumber! >= 0 && pageNumber! < (self.listView.document?.pageCount ?? 0)) {
- self.listView.go(toPageIndex: pageNumber!, animated: false)
- } else {
- self._goToFirstPageForFristAppear()
- }
- } else {
- self._goToFirstPageForFristAppear()
- }
- self._documentFirstLoad = false
- }
- }
-
- func tabViewIsDragging() -> Bool {
- let level = self.view.window?.level ?? .normal
- return level == .floating
- }
-
-
-
- internal func documentDidUnlockNotification(_ sender: Notification) {
- if (self.listView.document != nil && self.listView.document.isEqual(to: sender.object)) {
-
- if (self.myDocument == nil) {
- return
- }
- if (self.listView.document.allowsPrinting && self.listView.document.allowsCopying) {
- self.hiddenSecureLimitTip()
- }
-
- let isUnlockFromKeychain = (self.myDocument as? KMMainDocument)?.isUnlockFromKeychain ?? false
- if (isUnlockFromKeychain || self.model.isSaveKeyChain == false) {
- return
- }
-
- let type = KMPreferenceManager.shared.savePasswordType
- if (type == .never) {
- return
- }
- if (type == .always) {
- self.myDocument?.savePasswordInKeychain(self.listView.document.password, self.listView.document)
- return
- }
-
-
- let alert = NSAlert()
- alert.messageText = NSLocalizedString("Remember Password?", comment: "")
- alert.informativeText = NSLocalizedString("Do you want to save this password in your Keychain?", comment: "")
- alert.addButton(withTitle: NSLocalizedString("Yes", comment: ""))
- alert.addButton(withTitle: NSLocalizedString("No", comment: ""))
- if (alert.runModal() == .alertFirstButtonReturn) {
- self.myDocument?.savePasswordInKeychain(self.listView.document.password, self.listView.document)
- return
- }
- }
- }
-
- func annotationsAttributeHasChange(_ sender: Notification) {
- guard let dict = sender.object as? [String : Any] else {
- return
- }
- if let anno = dict["object"] as? CPDFAnnotation {
- let value = dict["keyPath"] as? String ?? ""
- let didEnd = dict["didEnd"] as? Bool ?? false
- if didEnd {
- if value == CPDFAnnotationBoundsKey {
- if anno is CPDFSquareAnnotation || anno is CPDFCircleAnnotation {
- anno.contents = anno.page?.string(for: anno.bounds) ?? ""
- }
- }
- if anno.km_isMeasure() && anno.contents == nil {
- anno.contents = anno.string() ?? ""
- }
- self.leftSideViewController.refreshUIForAnnoAttributeDidChange(anno, attributes: ["keyPath" : value])
- } else {
- if value != CPDFAnnotationBoundsKey && value != CPDFAnnotationStartPointKey && value != CPDFAnnotationEndPointKey && value != CPDFAnnotationPathsKey {
- self.leftSideViewController.refreshUIForAnnoAttributeDidChange(anno, attributes: ["keyPath" : value])
- }
- }
- }
- }
-
- internal func applicationWillTerminateNotification(_ sender: Notification) {
- self.savePageNumberIfNeed()
- self.saveDocument()
- }
-
- func CPDFDocumentPageCountChangedNotification(_ sender: Notification) {
-
- self.leftSideViewController.refreshUIForAnnoAttributeDidChange(nil, attributes: nil)
- }
-
- func CEditPDFToolModeChangeStateUnkownNotification(_ sender: Notification) {
- var editSelectd = false
- if (self.listView.annotationType == .addText || self.listView.annotationType == .addImage) && self.listView.toolMode == .editPDFToolMode {
- editSelectd = true
- }
- if self.listView.toolMode == .editPDFToolMode {
- if editSelectd {
- }
- }
- }
-
- @objc func handlePageChangedNotification(_ sender: Notification) {
- if self.mwcFlags.isSwitchingFullScreen > 0 {
- return
- }
- let page = self.listView.currentPage()
- let pageIndex = page?.pageIndex() ?? 0
- self.leftSideViewController.thumb_selectRowIndexsIfNeed(IndexSet(integer: IndexSet.Element(pageIndex)))
- self.leftSideViewController.thumbnailTableView.needsDisplay = true
- self.leftSideViewController.tocOutlineView.needsDisplay = true
- }
-
- @objc func handleDisplayBoxChangedNotification(_ sender: Notification) {
- self.leftSideViewController.reloadThumbnailDataIfNeed()
- }
-
-
-
- }
|