granite-0.3.0/doc/CMakeLists.txt000644 001750 001750 00000003226 12340443640 020157 0ustar00shnatselshnatsel000000 000000 # Serialize deps packages for valadoc foreach (pkg ${PKG_DEPS}) list (APPEND VALADOC_PKG_OPTS "--pkg=${pkg}") endforeach () # Source files to scan set (SRC_DIR "${CMAKE_SOURCE_DIR}/lib") set (SRC_FILES ${SRC_DIR}/*.vala ${SRC_DIR}/*/*.vala ${SRC_DIR}/*.vapi) set (BASE_VALADOC_COMMAND valadoc ${VALADOC_PKG_OPTS} ${SRC_FILES} --target-glib=2.32 --package-name=${PKG_NAME} --package-version=${PKG_VERSION}) ######################### # C API Documentation ######################### add_custom_target (cdocs) add_dependencies (cdocs ${PKG_NAME}) # we need the lib's C header file, and thus valac must run first set (C_API_DOC_DIR ${CMAKE_CURRENT_BINARY_DIR}/cdocs) add_custom_command (TARGET cdocs COMMAND rm ${C_API_DOC_DIR} -R -f) # delete previous files add_custom_command (TARGET cdocs COMMAND ${BASE_VALADOC_COMMAND} ${VALADOC_PKG_OPTS} -o ${C_API_DOC_DIR} --doclet-arg=${CMAKE_BINARY_DIR}/lib/${PKG_NAME}.h --doclet=gtkdoc) ######################### # Vala API documentation ######################### add_custom_target (valadocs) set (VALA_API_DOC_DIR "${CMAKE_CURRENT_BINARY_DIR}/valadocs") add_custom_command (TARGET valadocs COMMAND rm ${CMAKE_CURRENT_BINARY_DIR}/images -R -f) add_custom_command (TARGET valadocs COMMAND cp ${CMAKE_SOURCE_DIR}/doc/images/ ${CMAKE_CURRENT_BINARY_DIR}/images -R) add_custom_command (TARGET valadocs COMMAND rm ${VALA_API_DOC_DIR} -R -f) # delete previous files add_custom_command (TARGET valadocs COMMAND ${BASE_VALADOC_COMMAND} --doclet=html -o ${VALA_API_DOC_DIR}) ######################### # All the documents ######################### add_custom_target (docs) add_dependencies (docs cdocs valadocs) granite-0.3.0/doc/images/AboutDialog.png000644 001750 001750 00000061272 12340443640 021571 0ustar00shnatselshnatsel000000 000000 PNG  IHDRBt!bKGDC pHYs B(xtIME0 ̅Ǝ IDATxw|TUwHtwԵ.umk.`廊(\U\]'ԵX(= $ҦI) $}]9sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BC=SnLE` g"-^p rޓ EEe%}A;+6Z@{ܟ @ޢFKŅ! DT*-XlXZ*2DGhZAAh %}h&6ZWhZAAh fh(ђ0-6dvCAh.QC.F#6Z21#QAAhDqBdZh6"BtZAN7FD&!,%|" 4'a#Phԋ O@z_]hh i@' .\CA挖 7PGԥ1lѬǙ0az5^z mAZ555߿o솉-f ab&x6QF-[lh% ҩ. oÆ k}쬬,&Mof //ӧS^^΃>hRnf.b q֭d2qmTW^ͮ]aӌ,}G,]P?)S4E$q[ݛ/2:v?w} |iӂDԊ^{eJKKy'_땇YN3"4A_'|5mqq1Wfʔ)TTThYt)e|222X|9[lѭcC*++`ŊݻުX|9W\q&Sv1n8>c}t:uƎ=)y_}RSS# fDh^ /B6m1~ѣIII=w\JKKu(--eܹa~_?wy\tE\uUAi}Y2335~yG裏>}:&MO?xo6l/1i$F=X,(QDbٲeq뭷 'hNK/?Cj|,^x_l?|@;w9rv#G/$..WXXn.]-ҫW/jjj(..&--9++Tvs#G0|{9,?m"4#BC#G߼ ᮩj\klU QTc6;JB2I1:Ż7B:u*7tǎM6aׯb aÆ dԨQAqqq{g9rfjjj$$$DLӺukV/6lX쏡2w\Zzw??c,do^kGžsQqQR$RD CCA1HjH|hRKMq/eE^x;]GOidcңGϧ~ʍ7h"N$ܹ3K,iGDcϞ=\?m(**:sl7++ŋsŜߧ믿>(\A#B#¥3l 9Qݕ>d6L .DhCsL;NV3BOXzauGǴvчY>ǝwڞ/^zn!HP=z 60{&W_|3gnc1߳g]v=)^א1͆K(//{>xWxW$AhZ[@yA,sc: p?*j~P q_5j#j@_1+ NuPFް6Wj>̇} Ǐ=myGEE֭ O8q"Zjzx֭wuӟXv999'8,%%ip\bp\w} 6ɓ'ǔ2g~ӹsg#&ްZW`.́2R4DF`:ja"DDB[/(tEPˆGU]!JUlL<9h cɒ%\qRjO#%%%1}t,Yy?o[V\̊ I+999k4 >ٳgc٘1cF_}Us񑥓37Ыm"Tsb:_%5j? xK)<\Fx=y$1Z!^5zjx£(Sۑk\zi{6NW_ѣGIKK￧UV 4Q/**t:+g}ܹs>}z.]qRJII!???H^^|<1=222Xp!w_lS=dgggzy Ć\eXۻ[%.Dd @*@@#|(zqhQ7WYi}6:uСCYd v1_n\$%%QRRB4fZ:u*F׮]ɡ&6V=NUU[n%==]3ͪU2dHLuc=?~ԝ-Z}::_ukaٲeax^??,߫ʚ5kŸz)+OhhQ?.e-X.:/pY@ `#eQm=(!Dd՗wEn2e ,)UW]k HMM%//m۶Ѻuk^z%Ng̙nzq8l۶;wҩS'Ew„ ̞=yG1p@ٻw/v+䪫Xg/8s(**bݺuv,X&\./2Ce̘1 s׳hѢ^s5~z JLCmD`KDGh@XP!ƞ8eo%xH")E _~qSLDZO8mۆ[VϟϪUرcGL4tf3\rIA!33ݻwSZZù:thl5>9sذa#??߿лwoC}2x`}]6n֭[iӦ 3g$==]\wOqqq\p~H0W^49묳 Fk%2 0zacT[߻C|rEp:uh(c.%^FLwOq1:tUob;VNdW+ q-P 7୻|uWAf4{\B&3Ģ1יMt'z;2GjMev|bR biӛ 7(.4A!vTP[Ibagpv=F֩FrК 77aJjbOԪ7Qv{ 7~JԺKUAhQȌF(0|B{ g:4snpVZm|άF"9Mp(Q -ZaFhcFz^AudP"Dh,譂Gg%ޒX=1!X/>Z  Y: $l)]ZQCVh,AtXc<]zOBh"I A -z#\!1f4,}'q{ߎ]a=D A"B#BBs JU#68PGb\HG޳AqᏎ.A -tD,^ڠp7 vY4cOCu{њ iF~t}h/AZ<"4PaDPXPtD1Ḧ́\5c \dM_YTEVA!B#f]aaj;YV |OX >1&Rl6l틡H^C1(, ;A="4 kÌ 2aH|`'F2`p>D04ќ$QGDh TDh5oDX"<U=IIFmKTEblaAPtf/"AqObh6(t ^}eyM/!3*7Z}".ܳ мր+:[&:95E=4@WB7ݳjdAah($Rą Z!iXtZ**\?(VC\lvI{#n!Q測9SW3Qg4CR;,Sb}#,(ۆE\ BEU믠~qGs)TTtˊR0X[{|L| dDa}FsAEa. 9TPP4'򆌈^vH?2ȪVjb:|jJP7(ՠIn u!HAh.%Wr"0JԿT͗a锠Djl@cK6Dùj FQp\v/Cgh~<"Rԣ. BFF>!: Cà7̓Pc08څk9ąg $bSWDV^5BcT#Q s=o#W\Ɏ;is  hHwiPW- !FR+ b_`6PTDsbq*]j\s5|ᇼkMRѣGy7#ƿ⋚q , +?7o駟fٲea233;Yv-ӧOg֭@`9}t>#.lϳyf~߳bŊ4E]+WcӦM̚5/2.ٳyz!ݾ<(~۷;p 7wFyNvAhNȮ0GN2 ݳ_xQ#%Tbܪn0c>n\L>}:ubv܉Sk?ӭ[7E!77{222Xl}aذakƝwɜ9s֭C%77L篫O>,XxVX_ٱc̙3,ϟ9眃wF-'ƪkL0Çs}{fƍ{}Ǐύ7bСC:tݻӮ];>#˶m0L 0Twbb"Xz5?8ھ};)))tڕ5k0f***سgaB9Ԫ>msv߂؈("]aC'_X=z(: c\AsU?a2)-, *kVcϔiP.2_#>Ux5bS3cڷo&2|>3ftrQƍѣG;w.C z|$&&ҿ6lUHNN橧p0vXڴiË/ /#G yw2e ݺu#77Y>޽j~`ʔ)|e@y饗d">>xؽ{7 jNNNf'|KRTTgR㏹+4?CC.]طo={dʕ 65k… O>ɂ 駟f,[9sg^xTUeڴiL&RSSIIISNرc?ɱcHJJm۶߿+ŋӡCwΪUda>?>Ovݷ 46"4BQ5F>%pƅG@&auGX5dXfLfY{i=IcUTl^RUd\jԦISPP+rݺuX,|ITU.kj{k&Mի߿?k֬999,^Fvv-[0fn>UU/r_E\q|\x'K/zn7-Gx˅fo4U]wofU8q"VgϞl޼;/4b̘1OҌ߼y3V~ZnM^^v1e<ŋ0a?ݻwg͚5L:ׇ >yyy>|A@l4Rekk MT=ۑdk6p[Ilm|3Z$gWp68Y}$&&jPӧOun8|0@Ѐ׭[7;v,k׮jEڵ@ڥK6m͛ٵkݻwC4?~\IIIHEEEPaO?_Lǎp8'<K"8pkײm۶Fkܸq̙3o^xA7ѣYz5iƿ5'Oѣydff;x }5,y<OJJ |WܹѣG3n8֭[#33!Ch;bdJ IDATP0} Bc 3Au8]91aB\^ (5=3ނI5qe Lίa팺6RJHW^OxޠY ZjEuu5A቉$&&ƍԩrӀHMMeӦMw}tܙlLze7{1c[oquOqq1=zKh"\.WHƚǏtj!Z9۷ogtЁA5Z]~$v;/fرAq&)Hx硇"33/|GAvD"##I۶mIHH --;(Mqq16mbРAL&t3_>>CZms%`¿J(: F$,!Vd&T7$YM-(v3OHMMeԨQ7AUU>|8/"~-iӆvڑMvv6+VBz ĉy׸K[^^Nqq1Ǐ'!!!axqqqw^tn ڵ'b RSSٿ?f *cͼ{ocݘL&zȑ#y0a5-3yd&Oܨu}״iӆ6m3nܸ'L /'|B~~?m۶޽-[o>駟d=\_L=hӦMP޽{oYd ӧOd21b{9,YBϞ=)++cь1 rUWhb~;w<#-O LufϞ=1*f1]+UKvQwT(o SREk(^e8x._LӋWTPl,رc9~8VbϞ=ߟ.]βe˨3Rp8dff2c ~ZZ< ftv9vÆ lߓή]1bDP  ))>s9oh Я_?Ea͚5\.:v-6O;v͛7c;!555,oYYÿWNSUYYɲeؼy3g}67xc}ʡC5j|>&L@MM eee 6 Nǎر#{&==B>Co:t1h ȑ#q8Auoݺ-[`ٸ)#FrJ~GGNHJJbǎ\X,tiii68hArL} ͋Gyd1x/h6(-}"^`X&UWW/lʾu3c;;'#/6ms!%%u]v-9Z>&[pnjG/ "PCNNu ތh!2բfAfangGu׭/̆63yaa!oe]̤_=h+ BKGZ.KfCćNy %FG~Ea*|A%Qm .,46/HOO _p!6-S$^6l?n<\cpK5xH4aNE52zqnY0S#Z _NL&%|o l3iiioXS9m۶宻/Шϡ 4DhR4B7R4GP|p@UOPE4ؐF|FrՄR|W~'Zl|>tr , -Y: $qh9찪!+j-OX3,V[W8P1ShQz+W BCf4Мv~y#4o@bg赩C Wֶ@[cg7&&юA3"4B}Id-@F>㤮F}ɬ@I~Q/6Gݪqی礵 A"4dɫ3 0 4RjxF6 Ct*1Gm0va!C"B#]@y :54cHCLV|YEKM rܥVhئ-A - Y 7<!'bfUg &h,(eU[hQ g"4"A< .h(C;m,#JĤI0!+B*&G!^lxᢴb!pF#B#/blBϱT ުW1p![F-sٍIU1+C"B#7B@igW(J#4\S5c6kOQ - !n웼>V?ݛ$& (;1 Tn A3 V"m''51OTTc0^U+s=o0J -aԟQ^ ߍIxcХ%mk^{,*&AmItw BDF(a.Um/[f<aT^J|Tńb T` 3rIXy"2AZ*rzOUkUu H5rzYk7%wĒoE)]Z\mm螀jzj> fƍ2233|><$"##C hDh7GuVV=u@U1.Jy26׫b3 oc10YLbBչ`_;vi(..`,]4,OAA?… 5_7{9N ТBV_ل"!¬_x0iЍk^>saxJ\Ť%,56QOC a֭lݺCev"++b222HJJnYt)k׮e۶mUUU|>vѣGيPPP޽{&dddzزebx^8 _`AbJRHaYd@kHM 8idB$NW+nVKAbڎd񝒏sw`۶m\}լ_ .ݻws7SPPSO=(9{9^xnJEEw>yp уYf1`L&>oamڻw/O<.6m;t:ׯ6mbŊnfϞ9"p:ޯaxJʢD`? 0Tx ŤSx,3nu=03f o&^RڵkGvv6{e8/,Y7Hyy9_57x#7np뭷~>f͚EMM_\\y啸nVkPV+< &+C1i$V^M~Xf ǏgȐ!!B#GuOpȫheT"W%B{v0ufۉgufb|=a2ff֥ob~*Ćf]v].]`6q:l۶}u a܃RXX4h۷q:cǎLKUz"77c2sLn6lwމdcǎ!B#%5dd::QĔ ^so0cGZË_A%XNliԾHbkWzz:| #FjEG}q~Fx넄t_WXvv_@Dp8㏴o>&#pcP- Wy3e0_z'qyLҵ_"#>P}@b[lv3VYZUnbYj vOOO~ t֬Y$4􈋋bX`ٲeٳ 6nO~~>WfŊ=z޽{0a^}UƍΚ̝;W 4;Dh;Ugl+KS_χ2r 1n yy[Z'/5y[V<6qD6mu;NAJ h_eu`Ruuƨl=702jyax(:L!`{ q֩Gތx.(G{=>\5>l6fk 45J1*(+):ʸyW3 p| T. x._լ'F(3AF?ڏi$% }ᵷ"ևֹn{h-&N = "aifNYY.]tt Y:C#:ҎYlFɋXEi9J3P]]_.!BGf4B tv(I^4QOv,]5Dί6J=?Gw 4wdF#]:~µ2E4 po5zE+B6]w:JFa5;񝂪}*dbJP(uQT퍘/O@]]n?T_&EF1o )4ʲGFLbwZ%zZHt WHĩT1=eU>3G7pͬ>. 3Jal;C9en;ǧrAhJd$0HQ]ZP qZv !kgĔ'ؐC=ٺǧryNLֺE$XtmU&p639e.:fCjhg}J Ve5^&QTɀTL󗩕>Aio*亳 v #(ᡱ3ADhh5)Q`H%3Njz|č7.W)H:ET洄 pÑJ/jÌ,wsT&0k?;ŤŬOqpw*w櫬ݡ lft`[3}(v=x~K3Em mAhjDhR?FJx""{ l[Db5v r9T99U=*.nGȼ/ 6+r*xrbvOE<{~G<>^V, xm7.fjˮ⚠sS}6(9j[7WkMֶu%;/T|>YΥxcPV֓'Yf4f^׾C`V&*uc3׾N.]+p'7`d<]O,_[Mbt]\W탓BcV 45"4B <<-d 5ڈ^#8$wһ#^"ߖ44oq<9`-,n"C+jS@D^,XU\YCT(f1Oܑ̰7r^mk BS#NPo iKFH:"lP1%j; v 2i_w嫬rXq/,͹XM72i}is۝8@mkqݶi BS B=^UΌw=n^#h{ϼ&̒~J; >q>Fih9&rTILf}U7&l+|OwAhȡjg*Qvh'*ALCUgǍbi{_"ά}`-gIJ}3N0f(ZNյ=QdTu¬K "Vw9~ ?b6Q`+FAa:b,aVFҕ_RRlV4l4R?AE"B#HƈPŢ`:ƑhT{ _z ]b3팦8b!SyRۧH5anhk*sM~Rӊ?UmDF$8zC.Yn3Sg}wI7dR8a05I`Eؑq{qsȷ#\Rs1uq6l-沏˪C<1AjZm F(Mѱx.y' 8,[z7މ\._+o4(D#Wʶ䫬rFtp⅝2kj Ր`51kxPZ=3W. |k/e#98qZ+/ۜp^olbbh;fEaˑ*'h0EL̎j[Iu{->m촲Vyɯp#o BEK0(QOdUCnvUZҮVc&DqO\|+{PҨQ9E6)N 9u9$.Yylr8Rᡠ0ܔiSfpZL.՟0m*ȯpGYLvpm$v `'<0-=+3[r<#ӂD˚J:Q(᯻㼪՟f3gL; ĊP镀H-&,f6En7aR,*R0ю g8BS}`/[7R;9؜6S&՘#?Sg8<0*kfun%6-ϩ+ۧerAT{doG*5l/HҔ|,ej+VpQMhO%IuZt Og%P%̮J]^=*HFa5n.d~Aj򫸼w [{K'2s*a[#oo;#+3$j3a2l[]D(zUv0Z$Xֺ̉|Jjb,C>ߩ! YT>ıj/Q>}%.=jR MDzJj|<;T{͞sVjeTDfq ;jg I=eWyUVkK!Y.zEN\ϐsCA~$GǷOlGVU쿽AcP-TVpDl$f ӌ3BbVl$Ѻ6m$%Hje'>#΂} ɻ3 ^҇:IN%gĎ|uYhe$#T\hjZ~ݕ[]%ڟ1$3{t[%Ifq5?b|xz2t#j_7/›v k0dl? w¼Go '0O@趓hg bRVvÂi4pLX,D=Q|\h"k>W&W1l-bh{';dzP%_e秂*U{%չɫڃJ;RaQ=:327"sc}%^]^Iu68Un)3;Ǝcy]XWɢݥd>7?#Uw/َWUMYwxHMA89Dh`KJ]9%>;\Oj Z'yҰ܏f V35nMcBZGV6fKso3 IDAT#/Tģ򩴍Exzc!_e]Q=(A *ׇ+N ^am`W)Nk._ Lu`5/%5>_øКZw缮gOĈq|;ɣTJU.ǿ.YQV“;ƎcaA9T-]|m\ڵVW%Jo]xKx~}&_ޤm__լsShSC. #;i™vi$}&Lx\ ?>^E#!%UPXt^[G0x&{W4oT{x,& wyOyW]SP"4PU^3 OQk*^0I(牰4TC=C(xDvi{ mڠFJ\vBUU|>v՘ A#BZL&f3fՊsgMue\.^/nۍW+8, 555A޿%BѰrC~ 3okݎAQL&VՊlfaٰZv A BٌYwnŨͨzW}~7P"4h ^iE^/8VvDLA`՞'(> #""AH"EznTxhEz'ZA31m0lȌEHv£6iCAy!B9A5hHm|#PAAEF3AvALD:A! B!BCA&C  M AA   4"4AAh2Dh d:TU%## \FCFc׮]aa.ȇ'BE v;yw5k8rHLe>|~I7k,ˇ'BE кukΝ+ɓ7o^P|~~>dggSSS@jj*.{nكѣ?~\s#|UUͥ:>ۿ%;;GAA|Ȃ RAa,X2ZjŜ9s(**?OjՊoӇJy>̼yx(--eڴi׏oI&qM7qsYgvi߾={/@XFbڴiTVV(J $++r <>˴iٳ'[l>cʔ)̞=Kʇ+)C ( iii~y衇ؽ{73f ^z)zfk2tPf̘G}EQ+1c۷o+b**EEELZjEVVb޼y,Znݺqe~z~aM[vÇΦ]vtѿ GYYf5٥Kf3&޽{ĉYf 6l`ԨQXVz- vڅ(oA޽yGҼ|wL6?(nذa,\W_}k^zlK?r{ۭN]VVLڴiC||| dFCPU>S}Qnf3Ce֭|޽{)--en^oPYx<ƌ^͛ӵflݺLJ J h_eu`RuuB(̙3뮻ܹ3n믿{_QQwo! PM@5܀]js&pq\._~%]v=eu|>-Z\  D}~=z?eu$&&2sL A8҉  4SdD T`kA9Jಊ*wӳMzf%b;.V⭲Lӏ%:j<>&w?pGY\Wxb.'Ks"\'w}te7/+ 1@ʡyPhPT=SOT#/kCQ"C[8L ù\\ !!!=2;s3n6/ Y|?́<3luV͔蝕D4XG(HN {JmE3~v{:D䧛n1qʷ[YzSD̈́( i&7W~ Ȱu(δQW{GI{ldADQ?i@70p!LV6l75m~/ Q)ynS9kE/Sr;Q&`?.Hk;D"haP`|CS_l;Ռ:1g n?-F0sx=7Z|z7zx#6M$b{3Fo_8vxD %ãc2^qGp5D 0$8*"fB ߏ\Q*ۺo˴B9Ka .κ|X|2(#rolY6;[?w Eif&5.?4ݬr]g[x%[rmkm( t_يbX4z ?c^߽ /uljzwsv|Z ?a {41 N1aeX!x$ N'~R5컄ehb6l,FC lq rbr~z{h(ۿÙav36a5aC0kZۙƠM;]EͲTHxgP$I?3Dt1 _DDA(nhQ0 ""aADDDqD↉  """&DDD7L4(nhQ0 ""aADDDqD↉  """&DDD7L4(nhQ0 ""aADDDqD↉  """&DDD7L4(nhQܘa'dYf${4(nhQ0 ""aADDDqD↉ /o%""aMRhP~?$IbEh|}Qƛq䉳^1@ ɤ˲|>vvc{KKKC^^l683΃4zD# YǣNTur80 ? (..Ey ա788 /_j@~~>`6vىfף Ommm>|8& 9998uTL7LgU'!ihh@KK I 2~? RRRC555Fnnn$ F(~Em788:FeTWW󡤤("h,C$Á|>TWW'lRM߃8SYh\Ʉ#F "ֆ#FdBcccB7rҗ8SYϘhzp\(,,wC$ p\z E777_ u_40F} Y}!2._8f3qe5V477}xr%$Iƒ>>oKv477'dbܗwvvƵƣfngU'ea;ww߅$I6l6l؀^ɲl466 --M73Ϡ~@@;JJJ{hĖ-[bKG/Yf/_W^dBaa!Νx a(j⩧~~HKX{|f̛7+V` .BwGy~;v`ժUaי7Q(~;wx(YYYzeY/Q{gkkfulbьa:EQĻヒlPzҧ}ӫ|C A hXVÇQRR2̜9W٬/ڼhx+qFL8Xr%f̘ѣNC8{<^m?]Ȳ 6 UرcXr%n^:t_~va4+.ՋҮPǁx9ݻ>^|EL8]]]QppǂDīN!ۭ& >)))Fx E9E;͒hDQ j ,c…ؿ?Ν{֮]R̟?? yfX?qb ,X=x^eZo .`֭غu+B]nʕ=nm_`ǎxDZ`|PZZ X|9Ktttϛ7۶m3<}{8x`LnAO#%%gϞXǑ_`(--O<*u^hҊk$aʔ)ESS~G6.eؾ};VX9s+y,_?Q]]=h$a/ ~6Mx,\}& (10pPbΜ9OKKKDz2莎>}eeeXd `ٲe(//ǁrg/,,[o׫+?YQVVr<㽶_p:xvZuCyy9l6Et8pկzN1 1U߸q0m49rD' ~͛q db}O[[~%%%8\,_| ϟu֩^h k,m!RwQqwhn/Z1^y͸DÁ~=6mڄ `ǎ6mZL ez*:;;1eʔZH1Lı@ob 1w'OqY͖W0… ȑ#%%%/I:u*DQDQQ\.\.Fc߾} u*+7Lꫯ I&LfL:?/gφ ?~ӧb(++1ʔ)EGFZZSmލꫯbɒ%ؽ{7?!%%%jk ^3gT^t uuum(4-6mիqY}Xw}ALdܬyj,Ti}&X@7Ơ 'N;wݨWx<ݜ/qx<\t cƌQ祧M&c˖-ؾ};~ߠ8u*S˖-=S 6堧b,e-//GUU'AبCe999hooWiލqFSձV}>_kVhooGAAf$/2&L&|ʘI+.Ei݃mFdjp:hmm(a;Eرc{}&X@7ƠO4RSScJ4oa1]ؗ`7@vUVVѣxw`Zf͚*-eYߎ?سg6mڄ7|3uχbݻˑeY-n555hmm֯_C'}HF7P=$[n9sm6[ZaXv.\lF[["[}IS |. $ /^Uhnb9YOtȑ#={vb\jUHc^ S'CiZ:tuunQmm-A@SS?'ND}Oee%֦y%Au2'ODgg'F[o:pԩ.VCa̙|4c ڵ x뭷`1vؘ ,cҥOq95 aXvF[ [l "&qM,裏r8^Hd²e˰yf߿5558s Μ9s>~$E\՟)%%mmm=.Ӛ+O$]2E?eJMMEzzzלN'F30zh_4CU,k^|u*zPz6} ^2/\Y2Gڟ%HuޣՆ"C,񍴌"O)G6n˄>,|=Ris8P5t+**BMM CԠ(3S(9NL>iaqMvv6v;N> ӭ@ǃӧOnks!Q59x jegJ8'}G\6n0h4.e~AL&\r.+a{^wn 6L!83΃+ jO$Kf)9 O obZ2DDDJqzѐ4<""4t% fDD4X;Nh""(tD#eV<Q BtDC+f[$"d"B'dCOV!謮>&IDD4#IDATtdÔS cпFŋݥj2llDDw>mѢEDw T7wEDC7;ѣo۳rL&͔Fs}hѢWTTPon;|q$zx։opo 73'9 8M#BDD(Nt;hDw!\{^ >Tml(9h ~=\dn&9 {$WC ѝ ()$D<' ]˳NdAP9`ADD*dCH6P5B l(GI(&op2܋a@S%L6fclz|L|hφZ,QJ4d(hh?󉈈UhDaW8^"">.zO41DDWrtl18""D"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD&5IENDB`granite-0.3.0/doc/images/Welcome.png000644 001750 001750 00000057101 12340443640 020766 0ustar00shnatselshnatsel000000 000000 PNG  IHDR,rYy pHYs  tIME69 IDATxwx#ێ^ ! `RfٔBz{{'ݽm-meHHBH{'ޖe; d8q;:G2F4 0HB $` 0HB $` 0HB $` 0HB $` 0HB $` 0HB $` 0HB $` 0HB $` 0HB $` 0HB $` ="Țo# @Sd8']PĿoJ!($GJV!8g/SxLIn_>9VjF^qEu!3upq>>"߆;ҳQ%Y]&&Aٜ5[_yVٺ"9׵4]Gr:-&I|s ]'8nÜ6@sb>s35FJ!pwD`XĨ 7c80* k{ $$+ʑm_"iTᓈ.!.vAK1c,;`Y1"- xBPkLz[79"e}rJznU kP pg,,ɘ;8%* O}GGZoS qylw 5њGchi_Bu{ r[÷ĶÉEͨYk׌.B5$8B go _,]J[_g6t4QWHz4.nv7*;^#]8pto?ALӃkr =$Ds~yշI=[O8ܮYkߍXߩ{l75ja zLBhD Jo+Gv||j Wl)1:˽.^`chIN\k(/Yw_>,!0O ^! ?S/^0="\$5%W/]^;~uţv.U ,B ,zLBab;ʕn,y9S/&<)2/Ə^Gy?W5GNK|q~7Ve߾s­Ru90V8x 2g{˵n~1&J+['πӗlz^j(\u;#9)o?oUKid~Aʚ$ddWBM}'L`nϧ?SM>rzjn ! l}#f/[dGn9y VV^?gw,ü:^~uh#5jS8t&VZ^E!̝GOpnB`ޑ̵H:ub%B[gw񑓢:  NFO'(~7yNjW)u͝WfSꆌKGz3-eqvsjB)r |N z,bLW'vp?sً5eImҳxjl:YaӼo]4vHB ݔ""WR'Vǹ !XZ>*9ѫ_߳\؂zl!QsԂj.Oٛs~!ظGWɅČd˴ߕ'O>k |}V7[ mLUZϻ/}yE^%o(ͼYy¾>ÅݷqG~!ܕ'co?&ܺomM^|ˎW]U&d&jFLph6'ot__7|N{Csof8S~8y_"R}$=$=γyncEKRb o=\miMn&i7|pVRKR/Lx~[wzM)% fn]\0LLm֧֪ ߼Zm?gdhIJlA n᧞6aڬ,6DѵԤ__xY6#Zb0|*:޳_-P}jWJ ~xgck @,kuͭ1Ys[zBm%yS [mƸ x#];^JӮvq;0aWƎ( ei2h/~:s O?ȍ7n|V$mU15aYLc7V}jNOW>{UU?}A;iƗ_~V;i[{}KL{zى4V]~ԽFdѵ[/6u>P܆n*skSzR\Kfп~yg&l]+fnw^&Ϙ5=b8Joۆ$+<;u[({ &O5t 4찎q)iږwWձ(kSaفk(_"+i}G3m,v^soFGM=sJX/˶ Q OXZwyY˹v3/eH[ser3K !ݭotwSfrSBa:ʊ lҒ-oxGL7UW de ݮH~UtOWّyJo|5>UkwYO]l <Ӓ_{؇G|8ejM jI,UwYqj%`,p ZV:w.wrެ]dXMHU/ޑ$Uu=u6 ֳjU=aN3G4V~6U$_<~4,H ,δ/jNB!Br.C\,9A+>;fw7w17 i8>'~ƥ8{Bx{q3\WXB=@a=')85Jx/}W^Z{3Zmgd!2tOY2}xԓJ5r9amr0XjOBJ^N(A,@KGJZdhYX8iZ2 nX^Uw_X6#]AǍ[3F[{5 Dm3nԨG80ԕ79-җq*eq)ݬpeٍq(ϖ Z,(2"jVZvaYDݗM8Z^/iwTi p=H 'fIdiw}a`UOb0clQVۉ >yݘ,EE̖7s7ͷ21pU]f~5yw/C8BU[}niCݙ{JuBNZW8DD\듄\ng:>=fO?y!_{"]|法[>z..l 8i7!1q!A25V //LH/cB001G64I=m`1(a*ggs\U>|wHY=O!pP_(GxG%X b TV+шnlecGIou^Ԭ˲n1̬u7k\%Jh(1\<"ݭ&o켩l `iC#^Rk$<委e8=} C/8tL~7CI4Ͻy G{* ndbMLlEz .Et5)ƶ[Ι*'Gu קݫ$kl>ڼ)‚"M߿{VZ1vCh`BW9=Xnw{Hap=]Ԁ_c\>uODt݉m1Tً6/2iCǣeUC v门^d!oO})rWm]ג 73? !"ۋ?Ec.7};vqfVo1S0#(wtyɭ*>or\#YGZJj-TtO"co.OEFi4T+ ն//s 8y=)ZߓſʖƁCAn>f[VW'ݨ2P0BkR"O9خz.ږm:jTأ{g,ͲkozDhܪM"ڗKe1@ˎ\tqyX$vDžcTL!0D?SZsƕ8RqLm! =>}my9NJi[g6P9G[Mz)[wȌmYo'+*+Jv-ߛkNriθY>e* ZP}[~ Qʬ;y-M~j-o-^|A+b~Kdη;^I.j7ݯʻyqB=ޯPy =?ɪ;4c*wr'wC.;EZzwZ _U{JRp1`:;.k#S-nhV#˥;Fꚝo,KnAc<4?;RB =,/&f7mdcEKIT'µggTL3ŧodO'];WZQdiRwE^6\ޱ|O:(m q/mqCDqWX\Z&NѤ[9HV Eiҙ]IgvuQ۟xB*2G0~|)~#|ŠHW:TEO]83F:d`7 Yƾy9F57tZd$V8֕~:;:;?-yay (X]?/[o \_'i=]ZmMu7|AQtoaOmw amroi$2eZj;ߣyΎ>|iAN|=!Q/~tæ=듟bST!Aozw<.:a6a-8ly_VEf-nVZBLYfq/ǫ!mz.txLCI:W& p`jcy3߽tkr: `_^ nwT1b:M\f4O>#gN q߷S#o ؈Òi5ŭ;z||ܒzy`5qp;.j(?}_73^ON-jlVb,O}rDoޝ58.#؇b4t.TUPӘ GGz)vm.woќ`;nD׏?v>!9VF#F6n=`ƨ?bBNɾ~r쵤ZX:7iI#,,e9XAҠ` 0HB $` 0HB $` 0HB $` 0HB $` 0HB ЀQW^ *49{5H } A/my["Yjڋ*;!ĵX_/s_KI)yunjjzNayU}Fa,)CMQjGoosK˽/36-Y&?Ϭ \ԕ]q7l=z>* *b`nCYtr\u0)X"H4BCi'.e*mG l&ⳐR$n.;qbi(ɲ/}A˜6їa[ya^:*)TS Ƃ|y-=!RQ.HBBp"kEF"ccfZˬגƢ!06JK: x79Z 4srm]ӍVǕl.eLƱTfשm;-)[2JELbco{ үt#`(=ʙ|IVQR/*i.cyUe*-ȻsAVQgeT{L!YyVE8=mh=zB0TY7+hF֮#ãB=;B۞i SЊ{2 +4BLPda?&穡+ĔEiN]yO ]IΫF_fF JVSp̂D ˈp/ß\3ϽQГ(ԪB~|Ϯ 6i;œ[qSsJb,#|-oe,eb}n.[kekUڝx) Ź n+7s(#zךh1ԅXoĂ(;!&o&L-+IJ*e6T$`QU9NGjW$w.1 ړ({ermܶE6-<.v$|DĔe,:?%]Orh9Eb,m !V3ffl$2i ]3jːL fovZttϥ렰ɋgZ9\k0(f[jqO3"ܔ+|@Вͥigd.n'ũ1g<5s.?psMy ]k5%zNlL;diPHg >֕f%]ڹ/Ъ꺤;YKgJ\vÜW=IhheW BkpZM"R+:>bdbiߛ e% j-we2ڍ_`DŭH9}ƒ"P5{h^7ʒ%!+z\<$zOÈIOYqv8~-!Μsp#Qso>nD{9'6N+RZGX{VtiOr䴝ycKǶHJN[*̪< ܬm?~fSÁx%cLbF-`س5w\{3| _/'Va?n:u1ę|ik2nM$|_Mڜu!ߢ-b Z#9j[F B,˄`[&D{0I>A* #>իxƬ^oJ׳{ŸC$.WD5QYq^:39Tn\-l+o[TUl}MWXXBecmhA55{q{v% 9#i#Sr9c9 E% ՚o8kN~f?閷΍2QȤc%< H/x֪cBB!r~$! 3uv:c\chRPuF;0Z%W!;_s?3n8՚x1)LM#>DRH =wmn'Ph{&sl|,q9jkBTSQvy`[7mk%M0eeYEm#P}I-)Wf8-)jzuѨ oH'\g󘄙*0&+Bx_qT|äA.",%hPw#$s\@A]8)k|9sٔsǎlI3z׹+&4Zd[C5 ZGN%GI4b] Z^t7F,טLd3o7jc~jEUI^&;f--l0j?]b\{3`!<)}IZ\шDn  \[1*$jOBǨ9y v[V7aB./Fę\6j\%+#S.P.$`aXX&%=w:.lȕ\c>&o&u*56KA gtJUC{69FΟji,8Ƥ.*p,.1'p\a]" 53kS;NKt)T:ʗɪ`8v.Z٬ρZA,f7;1 QÈ/1 ?nB✮cKt[o ɍ0Kێ]&3v $! cMq $̸{-rz y+VndM+G,{:N^ER@`T#1K8a̽U!`WeV]k B~BzE[BO5gs'1EPRU_OUZYf /n30JNv]H8"IA8̜9)՜)KbF.g@Ą~x~-%M8qF=+E~fyg5i;ݗ #K#w{pQ]-)&ʌ*0_f$ad%5vK u\U6Wƭӑ2u)h}%el8?~7mwr'Gji}jra؎35r%i@}"y;+ZƘNCC|F`UTR"mҜb43/G,([k{v8z3Vww>f͙jXlJ>M  ͝k+-)/6%N?{/믽]6+D=/Wu>AZZU.Y>uNJ޿Rvc"֦x}^L*n^H)$WģIs2\ɕ YNJzOKv:vJA{Wv0 L>_E.V'IPjA]|&!R!H$/D=S"Z1a[XJ f>1;ٶ5CڐqA>NIĵeōc:r1:e^}o ig+rǥ\6Bo?n:ѥPG:4+).IeoUMߐevBH~.?>=􄆇G`6-+ϩCAnE|Q~^\rg2__4>ɍO96'M.`oG+k f:%TVI"0@OhЀ!uك[]+?))5QB=?l9]%G J"M;u(ć.HB#82;^W ,#5X)2+ٟofmݔC`$4<< 8 vlT<OY@Lbi/-rZ0v0Akj?j'4l {B^?o;}b !ij \]-Ϝ 1MǯG,miOley||v c`YaѣG'LRt+L&իs΅\m# ㆍG`8t@Ohx=~YH=!# $DR (! $Aaotu0 )D0h  [p atnD5 $4<'&IIŪ84B4MY$Ls[wlX3475HJB*T'!LB;7oum#n޼fwT;}S%-6; SjVT-ԤDE `7UeU*Z^jT,l_P:tlK?!!ebjXǞpnҲav0Dp09 }vI&5"$9S.)5*w&"r c3d#y62<͙tSʎZRsTRcԊ S{f=)BGi{cn)k.nH|.1Yf!gscnJkT$zĤ}EBΛ5" 9rr0lsF 1.?ugјk-Jo=UbF0P5dĝ]x_q-BL YU/J:,Xnv?n۶45#-!u_~A7-{U)-t1ɡ7ҍwY">mpiNCzIhxgdJ{Bc"ԤdHӴ o汸_[F4B 5Yz)a¿נvŅM&|+SgT*]يZ:К !uU±.c笘&1Q n9/-"4fߩꪼDSKsS'ax3?%m2y0|jp7GMaKӚO!kBl96Y#$tBґ"B {?nJegw4QA& Ԯᡟ=!BJRR8xK*1 *6B4M+U4MS4MQIQE1 sRVv#eR?Ff y1Q^ήSpKdBw'#5尬zݕNn8w0̨QF!$D5ܸZX-!qh26a$A`RQt`1ƹJIntѬ=_h8\H[19U^k"6&D|EZd՝[պ! o-@>hn$4QI1bXnT[8upz<ºhjΑʠ+3UOpz Ӓ-ϑXY ,hkܚzft-5i]x/{v@֋b Z7A`@"T&! ( qL ղ~3DQU$R`</3F=b#0R6؂٣`[/ #3N.(IL Q 7u7ebS?{.ƶ,(f7: %B\ZSmBVkյrڎ!ԍ ٔ!B`eKe-j+?Znh(t["a@`c$iRJVd?:TZV,CHRSԔ%1崾iTw7Gfe* 775)(chQM{5u5ř7stf|s>ɫnj-uZM/MB'':#G˸NZX4ƍY{nynL|G +b'׋krh3Ɗ:*N.*JSX%7+%bKi}a'w~0i􄆇(DaC0%оÔF4GMc(Y0qs's<m@]l{0P! ˱~gv~]s0aDOMZZ~_gD̜8 \du r!ɍzxN>x3N8uέj{hۓmQ1\>E55 ]49ļqt&;C!Cwl")nvW_ZwA<+x ҰcǎhRٷqt\٬3d~a-"*G =a? o=ήP5TjuhHs\^jD08 4M8'& D*}6@$<0 -pA}SMmh( )!RL `$4 ( Ν;uIDRJj$"BP@ HBÀѢEI}mgw$\vSIEa*0Ihx` bt h0xb$` 0HB $` 0HB $` 0HB $` 0HB $` 0HB $` 0HB $`!.㸍-M/0 PW^^S5Mׯ_IHYϖm.)n"S8mDIDATsA$۠T*{"-bMBFʲ}?f둏]o_ˆ pCWK'^VigqUbdkV6FJ1N̔!΃e/`ȹ94\'Mڲy<c;DŨ#`X08TN&in5I(\ ќqa!R dp+WsfGp&jc`$ Ʊv6FU(-O}EeN52oFHd{7VS4BC4bd;;>!30qCy8 ŗvTkLPW\;^n9i uZfҊR$r 3o74`ʁ =!0X0AoL?OVqA1] \AB!l?z=C56 xqFYw権"v0aАFQT뿟AXt_?(0v;?7>> +3srp9~ɏB\[l5Pi>~G8Ba 0l8Zm3&S}$px<@OhiZ.+ lf `Ao̯CY L&WPh;)j@$4) `)*j̤ڜ #PKp2a Ǩf35?HBCǕ\>4ghQ*I HBCȈ_*xF-O 0!\r$HdϺlDцMB$2K $ȈSk)V'DKer9`@\.Ri2hOhLnld G0@ E&$m8H`覔?ǘ/4ˁ9țV$mExS_s}&ڪ`|V[h sXMHQ] @o I$d iBe3 BOOL`9D n)ڒ41U41Fdd2/Kk?+B^z=UiyIbZu ~>VaY#F#j#Fp:5eSΑʠ+3UOdmfqT42WƦvgbݽ/adcƐIBc;v1.ѶL0Dw8u}~e9)՘!J V5vKހ$4Dq8R{|F Dq;ײh+{+c._|r10Ӓ6Z+x,7ϊMJʫ@fV8yS+xB]{{f LR QT$IMRLJ1'&B)dG"-d|DD#&z},e 4qٲ yҙsWOSc [boc# =2{B_AjCO]lsSGӺ[ U%w$>٬P>6CZ,-q=!bJRTlaHIrIh0 GL.W8ݧB8P!Bޤ@g(J!0\0Կ>}FJZRh-`@ApuʎY"qBzu} && ]bA&$9ț&ᘚ B8IhHS*JV{ŕVWu7@7мA%6 >P1FFd2L=3;{&2g6fլyѨBh"***y64W~hnuo\/0ba0Q#!AoB!AoB!AoB!AoBABAAfsCE^^^3f@{ f-X ڵ nfZh8 n :!@f1x``&̄7 f*A{ R!n!az+Z]A=?j̈́0JUJ Cn  ߘ`wC,JK/soս#+}|MnL7a5zL~wO=25}j')BC{7'3CL}ݽvV|͌=[s3,\ 65Oh4s{W !$  ա`PPd;4js~Ǿ[|6qԬ]twƘ;/[~kw۽?݅*U'|fnZ_PFHhI g\ujH}kғABِ.2}ח]5!4tc5k =)Ry6y6^Fn`SU-V°N7$<{~VZƤ.)5&6%_7nyw)B:](,,!CNSRzX[[;|FIG KT?XC˦37˳^4,ΐO'ci#_("_b~$1 |!p{+ƌ:ZXS 3BstMH{ ߸e:j!{F=bhz1qD:@B!ZJ7"d^_W ^Ǖڰu'w-w:p¤zh;dI#ةgxD8ud}l18pkB999P,:thppCo'Ս ̄G ߩpҥ;cXE"QaaagFrZ6! mhh`YVP[D&a9N0Ѵ4n4.h4Kp`/6XD`0XmnZ FD,"`8@=XdF[N^h4,ˢ`@ ?p8JeJJN+fXt)))JtcBB=>v{ppZnkk|[[ZCps|G EoSfp0 GQVk\\GGGqqqV_V-V3ʘPR|rOt'6nۗ2gO6Wz4!^QrxyMH@;9WNpP3eTO#7Lh9sv#xҜmhy٫ugOP{e5S2+Lܷ?,g O^9*5ENQ}O\Vt*5{^VoXzg=,Gɞk"*}v>9Ւ[=l0Vfip𗂆t9U{yCu\7ITJ-1Zjk{{yo,OB8!JimfF8O|gQT]UIq*E뇷9rV=Ǻq%/޸w&ѹK_]Wmz_IkZ)޺ga0-#[ q> EmA7η]ZZ Յޮ/>-ͥUV.k 7IZ|V"c nD,۷]|(Bjͼ峔J?o*qTbQطFοo?&poDHmOUXS4fОܶ}#^Y?ZǓbq:Nb6S~ *i͟,g N #kh S.'`|&OJHOujQrشp?OhrZ-(/1Id%YZZN_2O;99"88bGͮSBQBaZO~Eyle5hZ{oL"#IO K|ַ>O=^[]~W?,]'Vݷ[4Bu<"uJ B(OUOŊJ3 g";ulfS/JS"FD6gwX7h …cN\"8;.RjI!7nW?qD4gƏ-f+|wLGA3@!2ۺu@B$rq_/:y>qlDDk5E@/zNa ׄwdPy:޻b% !XzWNoԶ  ϐiOO^u`X|Q$5]=spI8YdHy'+Zu͵.|{=TOQ4<[z3AiiAlfמ#2{يo6VzlOIE}k[kSղ.YdZX[rbCgƾ@Gkي:]\5~>i=U|cZq(95?\Nޚ)a3!pLhwQ{yEx.F{Kޔлj.Hr_^qϚY?Kht&g|CJ̙aRX}$tl='V3f ~yGԌes{??ELtE[K20䐓Ǐ_<=ßrR?ġ-{T- ):RiEI)B(yg&(|S;aZVrۼ~ tuUw:E{%d͟ Oz'i~ڿpK=aKչ/-xNÏGEl2iҤDrĉe˖Ç7lHPT_W#[9+T,] ?ުBk:2'C3 e$nl"P/HAv'qAQC>mpK02Pf3 Z!w5^9~#@ !$vd2IRT:uL&!cid8e.VTT=3K("H Ƥ2sBIT|d IDATxy\y:K/3ӳ2 $ ٌ!`c7ر$78q{Nl0XUЎhc;眺tLϨg R3:[W_U}G\~DIIid: JJS BA4L14Ր)ʔRڥAI0PIY)# om&D vPT!u q.d6o_YG>')ؔ.__¶KÙܻVn^eϱ}*UtyBX|=4S£tqqj^ݿwg/`S ۰a a`% l,n o7OYJ_҇p8eو(TRi9X.RS2-q&5j(ؔ>ܐA$<Уddd!BL>@dca)vZ eKmC j MCѣ)**frjkkٴiRJn݊l6%eۻA&CXVbԲ wzESC;mҰ]˖ a$XjIBr*Ҍe٤cYRJ233#4 sc & NY$l[#V=~8 <&퍭tK6a_ gLB|hhhTDir͝;+W ,`0ӧB`\.armYˮoN] d1zD=Y|j^CG]/U>l9a%w M8D4 sy_؄Z@4ihƙ3g#x<,X隣 &A6M(|M30OaG~zκ=1aw>*+`~9-dgep*G0PLӤٳilG A"&DzCX.hB'dE˲uLfO//zN)iedd`Ymž}{C (*.kގmdffq_|~" [*ު*Um&dX`?O'!Y)y JMMZvBnʹBY)% ZX,dt$<K&A28|N$p's;i7|^iZ$&%Equ!p)%L-!pZ&׳>-?Kʀ)%={zjdeeQPXn , 4MvMgg'=dQY(J0T #3?~$p* ǝT˥t koo'xuvvuO{{;%jɆX2]b>j[{8x=zOdt{2ӥt) ӴѦiCJƶW@cCݤ~4.j.4u>AW{bK,b6Ooo/v$/A IkE tunMr .Ȫ?  E998@[{aɅ 8^ut%p=Sttۄfc5ku*ʨIkZho mk䑙Mu)۞nں,B8H[na QC*ؔc[>Uߘzؾ};/R:4$~M4ץ`]B;5V{R4f]]{9eE4nK&8$x!Lkc΍Mi]K_$wEщ'Q`RVMi ]nӽS}~>1D@ITR\?9d,+O4HS?!\W)]Vм;s MM![1$Ȓ18DAv !dhrؤMi0d|4\'5&coE_+H^$PLXD%GΖa=q !$ԗ LF!3MMngw8y#E$A( ;=uTJܩvuvLdt&;a\Kiz#ySq)F 7 .([M ̝3I_a&ϟ#)ܔ} ᬙ`0%:b*ilP 35Tnҋsdtiru(+iȪvtvp;cF q$u,"Q6,~\dLL"z4/9HD?$a'%t-Ys-)"wwud`F"3&]0@8+%X̪ ]B9DȆ|VY!Hno4*%U()M%,ޞjjΩ?CeV" 4\nw9ϩmܐUE(XۣҴ) r}51D]Fwp?`55;g. +54qyJpkSKM5K<܁PeY46S>ܤЕb4Q[SKQIIܦ@'Ȋ -.J! S/@Ӡ ʍeaD!WXcc*+4c%`QbG]41Q ȫ,ikmq+4xhokXhۍN%uHIߣ҇BXH.%uR³wf}>3s2]AcdYIC6t9TNmea3 _D?MLw7$No{_•%&&ْ 2+)qJeaNlf9~ۿ>Kp&\ '@w9R@N{j FN.LmDdLUeGA8ķغ@`1b5Uн䔔PEK< ?MzfdWF8lTҢnpnO{mok g0e~-ZDl|aaH4MGbq%DMh–:1pK]i[XR`EKyeK@&?qA}\4r Ųa{࠰h"JlF C=dɶ`ScU9%/ ȅ,k??ʼnvz߳g_`[?fMtvai^f-և9h2D-'IB^/޹l_8OKGȍ^L2_߳}Qϡo-i,)8v4ϾYEm'dZM{[~-q'|;_o*@jw ;8/y9އ--۶ ^')#(}eiLe0#V!zO۵9ױ(SO8&;qK4J{,dTlIw[{_<3xlEؽT?;Ȯ^RsSn[@Z/?'@I95A6c* _A$ۘB[T%spJg7qﲿ6Ģr%(?BxEfKXx+f^B,9sŝY@qqA kwϖu>u{ .$KlrRF= _Ա]aKyU k>{Wi<nJJVK.<#=0ʗ'Ll6|ӕxvW<\>ifN tE}y': j^>0z- mq:[(gb>:7eghQ87ڀYҶhG:k۱h1cf^Nm :ѥoc93mAdc9*7.泼ٴ㲊F^9ڋl븯KJ,9k3 7cSԋ"\=0_{^97Pt̻uܳu;\wq= ip]>F0sjm [m ptd9zӱiK|G*kGJ.^6 _^C^tܾL £ʺyDPfQW05x#H;O?+b~allM ʢ~Ω2"t?7Wlُ {rYE_Ĭ~?>/%Ot@<ؕsXs&زk ?>J[?}|jȚ>m"@/s  ϽoZ+h躁?jcM?0\f@vÿ!*I[?7DR]gY{=nMc d=fHc飹 jd« .r*n3Y.(dpjJS()))ȔQ`mOFDBBS}BxqB*&)+&L㮗i;.}uWy%dUp21 s6{%iupm-;gvi:?`Ţln6ne !jOrofe.!) -w;OʒX8D\xYDv"Hwɘ]Bi^.o䮺ØI.A+P!I) pƵ\MniFxI8-uR}Zz߼9#μR lmC spF "c+9xrXZZd_j2ifd(,-#U8]kG?xMdp|6..n'͗Caq ^fGfoɯެl\d{E!X_Ri)}(D&.]l KWkkUdZ>G.,ȁ- N7*-B?LXX#=A,,\MKEK/b-эF+1 J32۲:MirV5Y:(q~J7=28{K~/-D6_'HCPC FI&jtæ+~3~y8[?(T $v/暻bӻzn|Ez%h?ONjXwLC[gLƂo\*(͔1$Hڢ2B9Y2ĥ-ܾlVO'[wzk nsw.n$Vk;[N\ 1/H?҄# ~F+"w]6ޮyaa@}(oEHE>Ďg2ֽ͎spɹdo_-du,vKrmXs =M4cd VǶBI1|N uT(q`́4´7'5R:z;p8z /X0g؋5RiA/{FA Ip3(Hs $*(ȄՍ0qTqtM]MTbzA7Ɠ[8!# bcIl ꇔyY/n@Ý{+(I%؏@bpU4]}M3 "Ra` 'VAi@:Y;uE븹r. 9qTqS5 :d/[Yiۨ>Lp~1[:`RTd6)Ja!w hD"xfm]q,<h|*F5wrW`p-2nqV}?nX;pPl`4ez'P-mUiSg_(bXD['``GJW0ޯ_];zqܙ]ukHw7w|~s|=-bUq #MTwM4hqUP˚ }}~L^vE;l6hb#{n(AXt=:4]_9ד:=p+&bކ'=sTA䑟酮 7*_t@s1slz[q~R4LE3i9w/g#<.ݷeĔhb@jFt?g,X]\Ү)PRR)))ȔdJJ 2%%LIIA SRRR)))ȔdJJPӶ@ز,,CBI)Ѝi8mL`eS}u AeuWJ*]MI,/4imZ~ձmq{ܬL5l7%1&@~~!\QII[k+bܘ9-JJ#IJ디D1 1Y0`JSfLӌ Ok]5(T)M)h3a2)XdM66uǶm2;:RSEXqpkz,0{raW ^Fiũ7_D][OF3 P-nZi 8;?F"ӤDw7IMC퀦kZ6ТwR&E]eŹ{;_^@hw$L]F mc1Lav٦iL&dF{ϧb"FdD@@Č IDATAj: }5wn^/Ι#q֖BF%W΍3~_Ը:8( v> #?EMc!WodmC_ {$ME:%Kob|H!i\f50PG S<@^>BpVr TOWL~L&L:]M{X\$hjhr`wR <=[ufx5T. A6c.G9Y'Yz& >6Gu2gj/w}z'E{H@>~p*V~jD^vy(si9Eaٝ{mRrd͝'ľm6z.΍6wB6v4zs)WqGE&&#δ`FvZͼB|pG_Ys5n\$ܼ>R:hj --P:ds݈2gx 7%VJ'k#=T=BoMuRCL;,R&.6#oEYJN4̥(']%OqY)b -upA Mv7 -!RH"߱ګ8њJBBKQ}Mfb"!HSHaLI(`+ $խn>ɮT歘9T-AyipTR),y&;stA'Ġ6wX7ɴ9=m#/#qc4ml7DCIvqzRlo".$3v(a:j;dj f6nY=LI?fvAII_K}fyP}!ɗ~)Gulj1ZGc aO))`f1?; -[ ٿpdHS.oȢTӴKӻ8;]Cn;ut,*\ѳ& v􁙂K-LZy^a&-"p]噸Id!Ȩ-,BA VɆۯ"BR^TG)4u甑 l;A?(B~lth 0e=kā1Γ;x`=iLξt.,sQy@XK@;}3-H/ŔvqDRnj@z%YFm]k%XJOq6.Ə4K6eLJWZxKQ[褕_Ϛ*T2S~ЄN}5)%ql}LӅ8o3 TV ˧LPB)Pr4=UI&ļlMM |pmVtIFF:cMhFcl0 JJ).)Sa OlvRעE6Z;Me(4p[ϾURRRfĖQAK^ZR+v W0׿N{G㨓2E)i#?n,A˯oN@6UCT*6!?)& BmX.9dE^&ޔTu,۶dtMx<>ϐ@RR" )Ҿ;I%U,Qusr z=*&Ie:+VW^[oq]Xx de:Nɴjxޗִ傂"NVUwkI%MܯY[~z{{չciڰ'yM]4 )AuvaK@iied cv_=>,?nu )%55ф7cьL!.y "RRXTg5¢"5nH%16nȓO># W,0 azΡo dcN?0ԟ{Lq,%AjF#%q.пJX qnw4MVXAuuϦϏ?ҥKJ (6wb ?P|c$8d,?H""XE]uVvɧ>)>~_Z2M|>avW0QkbJ%E<$R:Ðـ~?˖Ӵ}N>RRR(++_|3))TviGͮ :1S ؄--Zt=.b"dokjjxYx1-|_xᅭvddd\QQ Hq`5@KZ'cbцA%Zn,\Daa!Vw}@__W9}41{l^р}b+yQĩؼi$`hbL_]w?;TVVrXd1?+VXv͚+flLdhC]©,i#EPû_?[nfΜ9ddd _ϰc;nK_ɡVk$i*K8Vq) /۶hl}}}&;AŢ ֮[Yx`lJ 4gD:RJB~!)))&T6e]8%6mИKQ4S-ۇxІ;(.*]J.%\ 8X%hoj`FItY.eɔdJJ 2%%<&>dJJ 2%%%LIIA4adW^IENDB`granite-0.3.0/doc/images/cellrendererbadge.png000644 001750 001750 00000010354 12340443640 023023 0ustar00shnatselshnatsel000000 000000 PNG  IHDRZFybKGD pHYs  tIME ')yIDATxkp}K2@ TEb `"֑`(X\Eq?@[uQXt- %p1F  L$ !!&1aZ3󫚪I=?{t]qŪnK+qXOcBxs<Ǥ2x8AwN*dP h1 x^AqBUU>d8ASx@r& 8x &8'MAqBtEAqB$LSUAtMlD}^)G#@: B ʁ 4 ǵ+r2 ⇮chF7o6'&&"33 ,b͛1|,Z*`l۶ > ϟOW0 1pF6 s˗?  bҥ`A>etҕ#yDMׇ"p>1<7ހ,ːe9݉'0~x16(򰯈3 i`|*aQQ\\SsAII +;wk׮RG~~>-Z:u aƌ(++×_~K.gΜ=#<:E]]" PXXcǎѣXn222ԩSan* 5[ ''5%%%ضmΝvqo$F^ HNN#1?Z2(`X[,.\'OBQf"++7݄ xbH6nuuuߍ(-pE*hlAѦ| 8pPYZ[[QWWg}N]]]aZ1uTS8"щ86hoocP4/A߁T?̠8}4 I`QPPӧO]BĜ܌.mv{̅( 3<*3(@A ~E <%# i<]Bi{{{ M6I 6md|سgn݊;v ;)G]" %DMM ?> " yTx5T `.\ ч)6O#*Dx~d$IC&8!ѣENNZ[[qС!o1vxX,'3<2* N?mPA("&*JLL0#iptACC fϟR>##Ǐv刱KRRRL NȨxl[o9sf}__탞}X4ap p4LWp _Qd _p`…CD#2frjB]#6n555Qx|Df6QZZ6QB[%U,Fd u,[ | oc{1?lR8F_ܪF- F}E؁Ԡxp ??Q 6Źsg1c }y-Z[/a߾}8x V^ /9rXE1Aqcؾ}/8"Aܳ|ͅOgTUc ĉ|ꫯj [uBUUlm߾$y8477⭷Doou1E1~xttt1?_=N> ]1}t#Ʉ+VСCGJJ {1#͖-[b͚5X,eXz5!梯O=x$6n܈+Wj󡶶(((7|'|cy[عs'ff&P377hii455BUU!++~iHYj6l؀ 6`ժU͛Jg(oJ 0333$!++ Cڍ999$ gFcc̚5DG}W9 YQUU4 @4Ǵihllc nw?jjƣF2!I$IhX|9~Gݻ7j0ayڐMOOGOO^NdddCLx,ɒ|>KKKc3EQOff&6-q*+wK.gy掎*bɬ]rg6իWO?&vSuXVVc>@ }vڵ ӦMòeK/jFcqFKp^o:dY)Yme9ss!vQ׆l67o=dH@UUȲ M0Zǿ{nw}X|]{c!go=NĻ Á^{Ei @X,bxBCǑ#b(mI#]ϙ ;jBۓIx? sHg fptDZ ؓq#<A#8mIA b(fRK~E(X&021N A.lPL4',s< ta״6F:['=5IENDB`granite-0.3.0/doc/images/OverlayBar.png000644 001750 001750 00000052701 12340443640 021442 0ustar00shnatselshnatsel000000 000000 PNG  IHDR NO pHYs  tIME )߱6 IDATx}wűulۻNwI €Aqas{N+5vI,XS#@@jKUAD@hI3j4Jn{V"ʃDO!ѦΈp` Lp!(Z֖,9QDC5jKJYrJ$$w[!)$sڑ#hl!X XWHak^  VF#ipq mY Y1 JB"E1# TXfW4=4+yH=y԰J@ ϻfĪv(p)!l!X͡JQ HDJ^"B) )B`+@{G=T9RVs8*SJdX$8 "@ E D,r6D=ǵXxDIVf[m@dA 3+.%$49RH@6R&E),\M `SeB –X%9DJi)oPpBM* @I1S@5CL2_|v`E"#2vLc\DE,[kLJ)Sd*HGH) fJO`( .XfoM>XMU9 hmm/P?WNW0s6 JTP8,Ann `MpxF"㛄aj0pRR)R*=`X@{1۶  k&X5*,X>SX,f*vH$IdP@a,h .P +6_IۑPYJ*\gQ 0J@DDr @uGhX5NNT&X5 4Ͷ6U6 ò,4513!DĢR t|h[vz}r) H@(9;uMӤVl6r F-T Ƨll!"( jR'u =.ӪgլC"]<'%q3B<ׂH 0%a# N$D{b:1FUBa˖-600]]]p-jL +@HP8Bxd )4w:::XDBZ0?G),T  9Ph$(! b66<* G58sBдi ='5h\*C*8ku (G_)ɾʳ GsA8Q (\pui,O8mAE"DKq8X Rc֭BSeY7nTcT"BL:uTo 4A|7_3'QJUGggbfgXh6r} ̙3 cXLI197MR&O,O%ضNnH}v߾ -AG(+ wfm 4 yfk(XWPǠ转ګ 4M hii9S۩TgNX݉tD, DԾN&΂`;`````EعhI7݉sЗ6NEOed걋NMw>CM*!1 ̑B/5p`qKϬH.f}7zVۅ3 co>}jFE>nϾo4H."^ "t&^Lvd큵|_.9,@ 5{};涱9(-E]d<Bp.@nQ." 7Ifek1s[ f ݁n\ꠇ2[l}'Vo} >mDnN==C=~o}p~tǚ {;r~.;=6 _yG|^G̽zEg-7g^T{q(cؖ4(D,d !wZ 'C{vcdKۼ^}Nz<@p>ʿuw~2Kg?_8=syW{Ut(߹㑛.jLf۷/o87y7x붾'{_ԩ^ ]G(@4Bl!`!ZG-Hl]3'(1Z^1$o{r!m9ξg_KJָO< XS_jYs?Τ-֢s7ipI:,CoyG?]}ڏuDxg~o˓KHh zS`oYΩF3'uQGu@ }J{7enc>v¶9{2,{Ң3'nzdYeJx{$S;{m!5;I,\qK~nȋ%,%mW/CW~ǸyN^t`MX2EnS# ȸ@vk|pzt0nM D(rU`]lSiy.80J赗aڢiV#ǖ]]T#%w<8@h+uh5T(g^--uI ly(v,K/O~iAIo.R_5LjбeIb؆(Ftr܌14wg==0S"W0Zbazb;j0*l͔f( `MU $sm8ino AaC+SpS [3nKA=k⽿`u^ZLyaŀ,53젉Nnhph0]£V:m3>]|n󝯚sO70:sW>kcϿ9jk|sO7e+=uwuʜ ]pY?z㨳f#1ƀ'̟?Ngk,>w_RszG;ȅg}W2U|suU쯽ҫzM DWs54v"4444444444444444444444444444444444444444 b¥.z^Y3".ׄۢxC˫Ŗ_|OS1Ty }aSKXvAxϑi 4'+(R3 IDATӎa@0 ۶CP(,+H$BSm`hfh~dee?=Lzc/d!kĂĂ5o>ªO]Jfph!6Zld†퉱%D,X+}z^e}C*D( X H A,mںd->aJBJmݶRhteg]O^rCϝ)֯_ $ p@~0 zf]gr&C $x ׮C{<!eZrYx%0'WTՎ\I̭K[y#\r  ۲u!::S'ų/ٗ }<'W,#P`Q`F[=X˶wN72 @}J"( yh3T({f~}* #H@H&F"S[gkN`04;`2LRW $$6v Z P~)5&ߘ͸@mLEYka29T(Ie"Z咽.Dje(,W 8nϓM#6eLT<ιhP0a7Y(*f1 !%Qf2j{UL:R-U( l5WJ @ u &@Q"5/M+Ie(Y)etX3bvK^ n_쯾4E8ȸs%}0 Sv6,r+-#PȗG&T!! D$GPL61ۨ?t 5PJm#^p5տ_5^%>=мc a8j/MnE`HzC97/ BTJ#!@rˤ#й&1&OPDDQZDGB,+fjeVP$"|!8nˬ>Wkʤ)SʿxXqq@*qL`yR@ `7+ H4Xۉ8ɂx0""P(b6t:s5Fի ڶӧOn ń!WP4#j0L֜=UPOe@ P49Eܖ4LX\pD$di#dGDͱd~9vL0HKg)#p4B_(4dB@I?4 3cWCۡ/WcB%(9-fmJB ShCC̺C0nN@n+`=XwYiFsv8W}0ܼhUcS p  3nE.=YفP)3OxBef_CsjFۃ&>;.KZ"CjLPw2`o(m3d{@PI-$ߟ- 2lQJ|2i<ٱ1cFm@(f|+B)7ЏhbLZ @ShElLӤ+ҎR $7 HD3<P:PRQr]TRVUnmm vHp0P|?_Dpd0w2L-b]XI3OjK!Q"Rd1;OJD`/n91<! 9`%h\Q!fE#mC A0HjB:c-l*gQMS5Qroٲ^6alĩ1 Bi^-DFoȲS ªΛ7oɒ%'pB"*;4}ji#91QJ.'beZ{"hmm!iT`ҤI FQ!L\0ɭSJKo9veY+rW㬳κ]{GZml 'ܒ[].\].<.\]3yju<kە[„9W/]}jܣx+W~_CtIP)UQ>RbB6S($ 8#B~&j75Nh>GDqpGGGcM5R ÈʓRtLaaIe DbppMX, qy\p?C]]]R:۴kvnFD3f"E[϶]S{'j D@o axR?16+Lfc/>77tŚe탕+:cm[\ H/7÷꼳P-d?FOjgu-[կ~K/}O8h4k\ߣYaB]Uemߗ9 FUeqɓ\MjT|Ə?00y7Md2}}}mwww<{RiN4IB? 3SՏM>]XO)POO9T>bO<ӟƣ>zqDžXZ3@iN8Ra:jR)o[3^sl,Q/pפWEX)T۬إ>.]D>> . ḆFETÐR-ϕS|>/D"E j*4c,JyBꫪH$|X ʕ+ L&gÆ / .,kprŃ2[u\`A0lX5"ChYV4Blv y[ZZT,uQq1vYJ޶k=}gRGwwL/K)]Boo_|qΜ9 }tvv|wy7|qǽ x0 ˲M9{˨n8hfX9"v1~D"q}p _֭[wǫHi@aShhL8G?OL_ 񖖖,`ooj<^t?GDc4b<<@WWi^xa]wGK/՜hhDQr?.Qgw" ͒g )S̝;׶gyc5\/nذP(4xVTgru9!FSԉkO<&|`ٽK^K7R;{O}.뽗҇rWnEԫ빧tьg/{6#X(9\pr`m$D"^߿&|\vg_ [\yW,2˾~裟+"fx/G?t~/ W{ϩw_lo=us?+7.ϗp?rjj<3= P||ۇ,q?;WԲk.{O8xp7kwlS/rxVz¡kg۷/o87y7qE<6;wg+dq pS잃оM#=#sKpԒA M;zZ ޖ':mPqŽO =iљ7=l@0: fYVCN1g~i߻ {?pΜy E̡RCz5aW^s(e9Hv~Rٴ#R"])|^]7퀮m[0SUp :EY=c?ƒ]p`k/V#ǖ=赗aڢiTj8l!bv){ϴ<_Ezg?. i:jS%c܂3'^w o}aq9AwśO\R3ҫ{FՓ|(e2RDH1k7!H #~>1D`ƌ;P}:"[c489en /mԩ$8݇.rE[gsPG~ϋg׌\+w>IթF=gBt|ۤy󅳆cfi8=u3NӲD޽77,[c V^7RvQ!(UKx+%6y~`HC!YA2P:B` Rg(""R+ }C"&uIgw:bAOU`1ֹ@BO=88ino AaC+c4~A>v}֗OxO^ϴHhŇd'@Y3]²55}X1 xg͎#=<_|˛n5RvUF1s=O wƀ@';48?y>˯dfN12=};^2)B}_샎9 ~63‰_|[t6+9ewua-;S1G{֏8Yȏq},sSu!A_xN,8{ӿ{ unS]](CszG;ȅg}㏯dF!Xm!OƉ*y҅w?>m{ғͯk m^.R^gScA~}/Gį|+:AcgU;nXJ͕LLc'Yy͇:;'~kǴuL;ExKhe^ɰV57>(ߵ&wd[gY3z衺fx' BLKKa A)^vndmCyw_j&U9 ̙3;::v\p F32lV|-OHrŭc,j)q4؝2xi635Z~Ff1q4Q,Mw0 X,6(ȱ')yڂU<)wjtM_~{l6_5O,F}^5t~Q^"mv(kZ!|m?64FE#XfԎ`{4vԂJL)U\Ƙyu1V,aeU?~<mzf7o e10t<OR@.3 öl6[qÙ3g j\!jAsMhE 97uc-؎Q90T! b0T0D"fͪ>>n8- ?@QeYsƘ뺜s)e. tZFd2NI)pOO-Q?WkEVX_Ң2q|>ŒdP@ޮM6+l%ٳg{G JBd=t'p"`+LdheY`!5ϼBRH;l[hhԷ`["lbi!D1f% F"uqy_Z\4-_&hFOJWPRB$b*"fT:0MS2ґR"7q H@- GV4k95d 60@ޗ7fpP(x/.ۼUuJd^MQ; J0D;̀ED˝sd->aJBJmݦiNd|89ad @Ja-8)unz}3Dn]1~Ցk\Ѳ,4@!g\@0srE_\2@up+uDK`Ԁa[vKHIDATwN D[)ZD#,?8, JaaNKDmC ɗ{:RiYqKMT5cRm$( f a`dPG댤ѷl8poGydpppwCooo45 ïBCD@FTG(DөW@ &Y5)P |E7Z9d2SYDbѢEU@I29,*(aȈAsFߘfi!" y6^ FtMznd/:gi~?{D|KzvSsna˲ᰅ[䞇yD \F^;o⫧LVht,U;n;0R%;oO/[XۜtiFy¡k~7cv -^eTv~ ܩLm?5z2q ,'=#k`Zt[0̀IM{^Uu~罹<") H"H XJAcBU:PZtt~WftT:L}RA)(`'XHJ}IG6>;sg{Z۱B v, *1]םvSQ4s%Rq5{k, CH"eNwؾ2 ?M#p{6v'-oUy|7lΌ9V|l< ѥ?7vf/Q)+\R+#17S&9Usk*O[;)j#ScO^y3u6bѲ9[&T?H [?>>+Ϲgf%uQwUuƈ U?}3Ǝi>ssNjߚȥUٖyO<=~ ( ~ 7lX@@ Q_wɟzWOyO_ZH$J{f>v-o0LUh:g\ZsGpOLG{hĘr /_z{S@wi…F^.}*ˇXQS;~問`/cneN趕pa*s3oZ@A>7_ܚ) ,ꬕOi){Ɂ8z}V .ߘZ1|c=<77yWX$\4{>Pr^9ᒚESqgMY< WRxo֬__[n n{CZK? zydY5\z.2wE6Vk;j@Bf31+-f>[X{C>͛>N1728js[t]ݿ|nٝK%w*a-\n3!_u'2-DZǒBT9JhsEޓዝd(+V &\hZM0@} 5\v,zQՏr,wά6)=o_-_jw8TơW4㡋{;Aꐺ:w =Ha?|xsn&eтn=+(YE!Pbmꜯ#LйSGDbItjVrVn1d5mvq }aP<9o u?y E(3zьiU޲Z _[.;ֺh> @)˪OUUY-+*vL7zg Y=`^&/ot,# _w tc %iG%J5麩VyMZv嵵cF=aTvKuʎLh}JT1DŽuNK TM0On5uڲ^ KJ׾ `;}6Cm^WjxO%RBL40 "LWRY:7?`h4Ӟeþ7B僨"|Ȁp($Ye7 ׌*fH.*[la5&\TLI`Ȥ)'LLPn]YiT*14HwjSθù'kIOgrdЀ "㮫.aH?}vq^)UaJCSuo|[kGV;յvZ(ؗO0ϙOhv H2{3ZXUsAF8|$Ϥz{ͷ:A|D,tu-FةylʄخpPd+mY<ӞRd3!۵S#8ܛDǽ;+ٳYא'x~u?l[Ͽ7,}~%\نS7{r|qyG׾Ǧ7>z'y˯fvE6oĆ}|J(donZqSc+zAx~gݫ^]z՝.'Knʽ7֮}i'3Z+ڮxŵ/_6H T ?yt}VϬS,Qްrɮ oi}}+b'Y .58t Pw\E؂{*cqM. z)bD i&GSs/ΚF{5tAgԩ/2cb0y7D$Vk蔢{gD|v:0LG`"tATbLK dSR0v:p;Lf,V'F&m @ۮ[T'zHY!%f7qTL[ m%me*` lp2a1+ q63UN$ 8֖#15.I%W?fvdpz} ,c/ c c $l'LFXXK2bsG@ 3uۯ )Qc.i y&S:oR%pch'0L 4@8.&2s3 IR/(B$ XL鲬#f2KFBOQ0A)+=Ry$p"6`)) #m˓o]hڀwW6dQ5VO+"OU5uvG’W6hyÃ;L+I*P2 O wr@pH'<'c%)ɸ`3ALm I m Z_Ž.fQr[^cXagdqaE3Sܸ:O.BiB*3Xwp7Xr1PB1W`lf]@H[D9_ZcGcomLdZ9:=zuٹcEQ0LI0D!.rFdn !"&P~ְsާO@ =_ e]fְ͚|_DY-X4 t6-.0c/$`;8H0LF3"8 &t_oJM\ư^lwPvm"\aÊ zGU `g-[tyR<\yK*PRIt aμkaM=k;-rrt_0/GP.1ឝ0D!Ț)q|APURZWWWWWwlի/P(ۣٲd2kN HqnjfKɩhH1pc8D&)h8aբZ旽h4gϞ3f$vf[DٜsIr8!2̬R Ka Rf5zuP(tUD(~8d2WTT455sB_h~9wEP)+X8 H4<P􄼈D1 1GI9J񒡽KacosFȾM[>/cuz 8)G Ų*Կz{w ͧVqj6ʑIx9m;mOrz\kҷt?baws0IENDB`granite-0.3.0/doc/images/DynamicNotebook.png000644 001750 001750 00000024167 12340443640 022466 0ustar00shnatselshnatsel000000 000000 PNG  IHDR};bKGDC pHYs  tIME ,e IDATxyxTUTn,DEH Aˈ<>:# :bLv 4Al`ZzghDl:\PHؗ,Jk*&@0L,),p8шHr k-; ɑ $="Qb @lZcdM*T^VqD"E >+G8@,V@"ؾ G$#2vHJb @,Q6D8YDG$jՊSdUjj"HV3 ˑ k|>Iɑ*kr|>_ G$bPrBrda @LZHRHKdБyኁDH{)UDD Hjd1b 1cZqD"X*HY˩b;@"8"cl@\ߵ? c]xيʩb74r,rD"/ZJIa @,ߵYJTHD1U>"1DD $R8HK]2 &T$eddP*X+ իWS"b*++}\pA[R߿_'OT("f*))I:묳J@Zc(r r#7쬕lC9>cRRRZTᖖ*--McƌQq8ݻwoQ("(Qr Fn 7Y+O񵴁įZ#G矯@ "j\3e%\R}я~D0PHIII@nr ghvlmH,))Qt3gU P=yf) *99 7ȍ@n 7r ڊ1Gin`[kzjmݺUW\q꨿ar$b aUff0jh@nr Ma 0@_mũ͒9U2kV\lV+Vжmײu7Hl#p ʒ8ѣ.uرl25z;>,Bz4О{9Ǐ+==\>h fΜx@~ӟ_jŚ>}=\IRyy~ӟV۶mcίDsi6Ym6ņh̙nvݺu__ƬYKKƪۙW]rk2n>9^qqyg?ke6~2hk{#eZ~ڷo-{I_CnZԞ={tgkʔ)c=޽{[ou=x^|E~Zj?.c k8^zItC=5"oQ@+?~|ܜ|SSLy睧JTrJ-]TSNՅ^zTqDbI2u}oym۶6&L0>s/Yh k`мk^Nj/h.]j/=>裨ua}c#*?oG"z-vZ BYvy뭷bgCy'AyM |:wl222LAA]W\a}mM6cǎq`mz6FnOۛUV{?쳨udLShzԹյT іf5Vnxץ )33fߣց2_BnM!:<+M:r|fƌcӾ}{w݋̞={iljL+V0W\qYp;w+15|cW^^9r_ZljY^o|>0avVmfrssfyfo `ddd>噣GC3gdb SZZ:#.:ܨ#﯉'}󑕕<*++SYY^}Um۶MYYY5?rciiJJJtj׮] /ޣ\-r6YF}YGQQ|X~"]vך5k  f]v1s!IGu׷~z|>]z޽[7ݻwG} .@ps &>"ߊ4tnѣ*((аa_{yBF-xM[}A$XGcF^xIRRRRm~ۙɭ!ׁN~ֻYT$65D9m4jZx[q;SpVZVV[o)(99Y'Oְa$I9997n֮]P(nM#FЋ/͞=[~_s̑$ZJ;|}7ԽޫGB-X@}wx@:t\ez;v~m׿W])c* ?ڵk%U\W^;vN8Q:uJ*,,T֭uM7ϖ$͙3GW^y?i֬YzꩧtWkÆ =z>[Z1cho]gVV4k,5J7nT8n˖- 8eggGk=g o(r?91;;[skddt?Z߾}5|peee)??_<;X\\,ϧKj֭;wF\Gֳ>4J~i%4f >\۶m… 5oVZG}T>O=|I9rփ\c!r{8vooyW9+_ӦMӌ3uaIRZZZ̬;C!ChZf}]M:s U/목rKxeggk:r<󏕱WV5{ァ9sk׮ڷo_By{Ostʫ~Cz饗n:越ꞛ$uU .#Q"mnN 3:w}>}zmrs'#>YUGmUNʫ5nM}Ν;5p@ڵK}g}N:iӧ233锟6><+վ9O6XYv+(//ז-[4c :u*+?j՜'Z}rp zgn[˵+Wj޼yݻƎt);;[Z_yyyٳgu*;crrrduǹ>CGI>#}9ڹsg:t(Z#c}N[pD KARSM̙35p@M6]ɓ'_B퓵VǏZQFHs9"k>|F*/K؁mΝUTTCjɒ%5.?V%p8#FIDZcǢZcǎ%\7*O+??_K,#.׆ BK/Tj߾}r"k׮]t'NвeTPPvUѡC?~\eeeڱc*cԻwoKURRmۺeWTPP~iQ.D:2w1An$i…K.Ѹq6SS9*cǎI655Ƭ޽{5eo߾zwj\~C5F{W^< ~*((p/m\|6rH͛7O#GԠAWMB߾}UPP>}No5Hn|%$TN/M6[sʰZ 1.kmzWqסsܜIcL~'ܣּʠr]M4xTSVZ]ve*,,UHwZsZ :TׯנA}vM8Qo<'?Ӎzg/X}Eվ9O6XYv+|Gg*66>ZZnU9k44iƍ_~YK,q5`0;v?w& oo8Nun%xciwy;={롇wG9s^={t+ׁ $D&^lY󜜜w gmݺUR`1F&MZxvء}J8|Ś6m[aj /{ B %iܹѣuqM0!`oYk^ݺuseT g<%=!;XBV^{w ڽ{tu%<\y9O>{W&IF?ִ)p8,q\DWu7xC7xF'OIS;wTV 2 .>G2V[I4oF7VٜPϩv* jdceU3 :T{Ӝ8qBIII7nΝ׎;ԯ_?{민vܩ~]^!jٲeQg0@1F%%%O[oUZZZM<94[5]_J;vP>}tw{Q>}}v DNRII-V:TRRUVƺJZRAAAB8P+VЉ't ޽[~EZmܸQ}Ih^ZVihĉڴiSg"ubݺuڻwz &h„ իnݺZ_K.ѪU܋Qs tҥ:qѳgO}8p{p8lm޼Y={=zhǎ2O?զMׯ;̙3}"ͭ o-xuȑ+]t>Sc^yַ^%-vUO?Xw fhV/`޽ɓwW"B$m۶UC&[Iy1Fmڴѷ~+c>[s9C۷ola͚5Q됚CK'ʠfUrOV^|C u֩*//Wvv??˛_}MkgffwF֩Ok~1UHt +#Vrђrhʔ)Q۴`0l٢s=s۶mSvv G߾}uVJ2;@HۖjQGMK~3ٳ ;JW]u c* jРA gG$&:r\O/ԗb]|?~N<փ˗&Mo^xذaڵ`$rUNN͛VZiԨQرcy~WWWM7}999z{ijݺuԠ\zzM&I1b?|YkF~OJJID"h5Dn?"rZ_^y~=zՕ-^XׯW.]t]wH6ɫsKī7yd-ZHw~kՌ*VyWRQQljjW"‰'4{leffV;2ouɐϭ}*)),)K,ӨQ>O6r;^T^:7|O֦ꛕW5駟رceLvVXYfy;w4U~U1*o^}g]MlHHt.RUǭcU_^M%h"Iқo;CsYgrJ=zT}Uzp)}Q^z_שS$I ,p2z鎅T}=2vYktRwL~1V[ZZp8}]vQ7***R~kݺuJOOװa:ڰk? FnoV+XdnܸQӧOw+|,[V8vDn$==]1yv`P)))***rWTTV4(99=kȷ Ê`!~_>нy-ǑQLT7kCzykRD>1FYYY|5^;`daRIDAT|>ڴidSq7Hҥ{thMύ1ܹ{uP8Vqq܋)W~_JJڵkz־}{>|=q&2ȡ ,ԩSջwo8p@3f󕕕^mڴǫo6-VvUs"XպukYkuAiJRRڴi#qT^^Ǐxͳ:-vUO+/))IYYYrG`PG1'Uۻ_wW4NjZ΃>^zIڵs*Yfjjj2$sԩJJJԪU9###MOOw?O6Y۶ה۷)CLtNڶm[TmC)cǎ*,,v-N:ԩSԘOYY;.]|XYe?Lp KmܸQk׮Uyy~au޽[+]2)@b0Gu-DMqFu]M QwZxqh8=|IjJ_~Vz"ۧ>maȍd>{9Zho Ed gmho 74mv+VПgy"Rŗ&6lʕ+U^^Twм@`Pmڴ=ܣs=׽k&#rj4cN*c{-[hզCw<:M:U/{w]˝#7r;ymsz{Dn7[s\ɍrCj˖-A%|#P(Z]v֯_O>DJNN矯AꫯV pok$nN,2i&92]"Ħ5h >m''Ol!7r;=]oF{.1Z|ywF{3hȑ!C[nUJIIѸq4yd%%%Zr:u#Zjn9:SZZZZ'x 7r;y5gT 5FGn76뮻N]w]uԩj͈K]qdm:"14#[&6Dr Fn 7U%$Zk;R4: r#7ȍ@n86lТ v׮]zשa-̮]e ߺƀ@n 7r 3/hq֑ݻյkW ֪X5#)HQeHW22NNHWN( ʱa@"r|>pO83>ĕd|r–#g#Dc FrdL E 6<ԌD H P 8>cH $ʱ֖Q8Fb @\FFa @|FrdmI $Z+GFx*c @\$I!Gf9/SgjXkHHU֖bOrJ JacH#DqYY9Zg%6f%GHPqD G# IENDB`granite-0.3.0/doc/images/LightWindow.png000644 001750 001750 00000105343 12340443640 021634 0ustar00shnatselshnatsel000000 000000 PNG  IHDR>sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxwxTUL*P"*..(A XA?.EI>#5 y33g9{5 Bqu]!B\$L!'&B B! !BD„B!|"aB!>0!BHB!O$L!'&B B! !BD„B!|"aB!>0!BHB!O$L!'&B B! !BD„B!|"aB!>0!BHB!O$L!'&B B! !BD„B!|"aB!>0!BHB!O$L!'&B B! !BD„B!|"aB!>0!BHB!O$L!'&B B! !BD„B!|"aB!>0!BHB!O$L!'&B B! !BD„B!|"aB!>0!BHB!O$L!'&B B!+p%h4B+(J]Jmk`_[ZZ)..:NfYpB;dRݻw\uBQOH8[5Dh]tڵ3oܪUժR郂2;t@ӦM'NRSS+ pȇK!xF@^L$t.<<?hР; g0zUt+))ߏ?q̙v]j셅*C BGqsz&47мysSϞ=ofC y.00中V+^U?޽k~~~'NXJKK퀃z)B\j:8*U+R Uz$M4߿Z6p(K.u~ίUu۞={j~ÓO>۶m/_jjjYYY #=BGT9 (LT `u]:r.{?_5j5== Ҿ}{ULݻw[^xrrrJ, Bq;{{ &tTN8ڵkC=矟-[裏\.Nw1;ܟ'//NdRB+QREJSXXX!CZ? ]~{9Dך3g'0РA@ w !To]s6Pԗ0qqq<;N. [NB?ɤ 1cƸᄏ7ov}_t 嚼<?^иqjk׮nFc+TMtt4M=Bzh4j&L,ABC= P@aa+##p䅆4iƇhvi*6>***xxGtm" B"AK}  w8q(=ܣCHuٲe >(zUh~&??ӉVYB!hF0 AK} .p8ׯOxWu IIIQF9{9q|7Ob„ k^3L&zNV[V!% W&Exxxcbb^zlL]```X`mڴYfy#*0ʋ(۩BVUV^^~7_4>Ok3g;w$((H 3!DŤce!ĹHO N`ƍig^tRӸq[ؐ!Cشiz~~ z^„($''Lzz:6ͧKnv>&LPKޒ qr*~e.t~~~ָq㎸\.ѣ;C*ofǎxnUՍ7믿5\}Ohݺ&F#z^&a 8 >t>tbccӤIs4n";; ҩS'5kY?** 6t7ojZ"bbb{XVrrr # yyy4nX-v^'""BM qaBQEѸ$SnPVV]j{…ESL)0`@L|||T.]ҥW9ٳ/(ZhALL ᄄ`CEiР?0fÇʰag}Ftt4+WdڵL6 NPPƍ_~5" ŋԩ| 3gp[oE޽IOOgذa >O?͛x]pТE -ZEtR\.zSrz›o_ω'=z4nݚ+VW/Ӎwi vH7noBBC2zhf̘3x>|8cǎe۶miӆ֭[ӬY3hԨj QRSS U[|9]ta8qVZxb6mʄ _&$$P/^L-HOOgmۖŋ&g.[.]0`Z?))'ruב8r-qƼ+ 2Ν;i׮/&22w}͛f$&&r=H V/z&@pQ;2Pxnb*Vk غukv;'Ovc4%  аaC5jD  ! Ʉ`!QҸ{ $$nI޵kWO_|">>;|0iiitNhSN޽M\\#GHMMU? ^={o߾X,vENN*'./Q_?&!!N:vZN<*6l`ԨQ #>#jzjV^>_XX~T[q>뇄wf_RR@XXW<ϯX+Vx=wP\\̪UxW߿?5nշ0~ O۶m[NWFL&& Ѩ9TmZb޼ysg{Ϝ9 /]w*|֯i³ѣG0``:Kq^e*°aø뮻xٱcyyyW!Dݪa{(?3,,XP'&&9spArEjeKHH+V~Ӽkߟy1k,@^^sa̙$''ӤIN:EHH 6B\yFoIepٌb64FHMЦM6mzL&mڴ!""B}h4h"ˣ_~[lI-~~~,\AI^^7tS_iӆF-ZĠAtѢE f3K,o'33|ݻwGrQz3jeBԽzqoMQ߳hݯ0~@պ*)7`rowτB!j !BD„B!|"aB!>0!BHB!O$L!'&B B! !BD„B!|"aB!>0!BHB!O$L!'&B B! !BD_CEEnqj%_Nj\z=! *++#%%˅F\q8溮Ul6SPP UEQp:fbbb^\Z TZZaaa$~N:(J]Wv)++:EQ8quu q8N, aaaFrft:FW6FSit:BCC9uꔄ qI(h4\.vWy𴑢(2n7ZVH\2K\r2jՓ%.' vRkZY$dggu5 QPPPU⒐0!.HKK#%%4JKKw יq8R_999$''|W_}2gB\^~eP Zxr[Æ 裏?33g$(( s+V0tЋjM61vXnƫjLj#@0|pn_d #F:4mڔ+VjB\)gB\r3jyXf 7oСC|wv;yyynS,ӧO'x pP\\쵭 ;;k}˥Bʢ^/JnF֭.'NyyyXd SNp)JKKR\\ɓ'v˫vnsIvgb]hYx199 ɓ^qFFEEErJQ^^^ӧv]}322κɓjnjzcj3=ppĉS |&=fٰX,hZ:ub`˖-̚5pyw2e;Faa!=7|3n'|Պ$""7|7|6m0k,:wLyoٳg^ߦE0n8z_O?M>}.kynݺp8HII'd̝;2.]J||aܹѲeK&L@~~>*ݻwoe̘1%??7RXXСCyq\l65kƌ3j]ӧӰaCF#| PZn̈́ .\.WJJJb̛֭7\F˙5k,Z=z0dVZŋ C;deeӼysRSS=z4ĉ<c=FBB=~-1sΥA3ydr[hsѧORSSyg !''z;󲴟"aB\rtFFF}3gh"Zh?ƍӟ&..z߬ZoVĉiڴ)N{Çӯ_?{ڴid3"""1b[n]vddd[oǶm׿Eپ}; CQVWDzz:K,?iӦ̘1iӦ1e4 t֍m۶~z7|sVNB\ W9s0qDϟߎ?qt:h߾=GQӧv?χcX(**"22B޽IJJ4i҄0:Kyy97tV.rE]@G\.ڴiáCԮx˅f޽4o\Ҷm[~'{t(mSq:TTTIii)YftөwdݴnZWǎz]O===ǏW_eԩ:t|yhϞ=ná0 tvܹ3[l/tb4{nڴiC&Mpr-|M&]tQ=pݺuoaӦMՖ+D] q31yd5kfرX,9}:hܹM@@zϩS`ɓntBNN1rղBBBj_&zڧ6AVV1䔔͸q*:I&QPP` 33<&&&SRR©Su^ k֬QF@AQbccSy]}h4j;у)S0w\/_{wVv*** ^zٳYl'OiӦ>BB„l6h׮)))c2Xp(8Oz0۾};eeeL>#Ghp\wu$%%H;>NMM*{:<dOpH6lҥKu<=gӦM8fΜ }@ƍz<6mZ.ׅΜ3` ܹړ QQQUﴴ( :ubΜ9̚5ŋ3rHM6UNаaC&yVWnΝ?>3gdʕ;BBZ'uĉ'صk6lW^t҅@عs';g9dggsg*ݛ۷ЬY' ٳgw^uJ>`aÆرlzngڴiݻ;vpgqq1vZuNW)Sطo[l믧k_ՅKȑ#:tCQPPcزe O>$Gfɸn `֭зo_JJJ9s&;z?/="b0|{ϟ5l߾/EppOm"Dm0!X-Z`ѢEL4ur-0sL4 ,`Æ  ZzV;M6Pȑ# *KKK;_:Ϋ3gR^^իԩ>lb{7پ};zޫNg>~饗Y~=z PRR´i׿oT7o+?bF?FsRZZʬY8z(Pd.\Hqq1ӦMcÆ >_H{iӆs璘Hbb"?#k׮婧"00ӬY31cưfKL& , ??SqFZncܹs?~KEEtwH???;+` tpEL+g2Zu޶uۭ>>it2>wfYmz(gQ\uԴs=1.gU9MkwMQg>w!mtrO=;:"Ⓕ!}&W%rraqzup餗9E:Ax|AI\r&% #77гn$~`w Q=DXiy&%9C!>0!BHB!O$L!'&B B! !BD„B!|"aB!>0!BHB!O$L!'&B B! !BD„B!|"aB!>0!BHB!O$L!'&Izz:u]!W ub몜%//3fuUB\%u]BQ֯_ҥKl63zh\ǵB!.d̛7 0l09pm۶ZvOXXZmeǑ$##H @ӝ7FQhܸ1l66lxκ)BT%a2X,,[ ̲eԃnJbb"+0`uof׮]X,5k… v_nAGafx kڷoϘ1cСYuJJJggt$%?5/4V+7p7&77tٳiժ'NX-g tM8q͛7Yh޼9Ǐb.]h @;v,.|=44H6mzG!UNz&."""8q"III׏ɓ'{n***HHH ((=zo>;FLL ]to'<o6ա&@϶ W_k.z)~aflEQ8z(yB!$L\~~~<{9VZu=zвeKV^MVV/^WYdI뗗p1ΝKNN 4vK}ݼʅB&.ŗ_~Izz:z[o[n^Ϝ9sXhBҽ{wo`4%44m{Y_HNN_~QF=۷W~fԩ]v< %⪣Qph*=#Z묒B!h~~~vV8ׯp+*BIB!O$L!'&B B! !BD„B!|"B\vzvzt:]]WA„VY,p\5OF( .bbb$TH„VeeeѸqci4\.iiiVUIBÁA8NW4NGFʒ0#BEQh4("AB\n7:N>@„VIW-Z aBQY\ sZ{$L!$P vIOOj\2n'Nu5.N''OD,8N:U qE8y$v]}lXZ'''2, w%b!77zr)++#//Omۼ<yK˲+Iff&Fjz@„"ܹS}G1tPNܣ>ʱc.i=EaҤI 8~rZ+'Vʫ}|^m^n7or > z%?kʕ+ gYlY]WC:|'aB\طoxϞ=DDDparss)**SN^r*tR\\>vdgg_cݻٹs'7nd˖-^vyr-nqq1^-[/B^^^eVusx8>JJJt:*bPXXҥKIKK#??߫ᤰΝ;駟شi_5K.e˖@ry ==]m35QZZs)**:O>ҥKIOOՖS]8^Ӫxggթj;j٪F%W͛T~q]rAڷohfj4i{졢ѣGs-e&OLPP:twޡ#Gҽ{w g^X,4oޜP7nm˖-L2ш9EEE<3 8O?_||\.ڵcʔ)L6"̙C||<#G/>d2g}VwXVynFO#Fp}<#9:t`ʔ)1fzźuxغu+%%%|у?OѣG?~a޼yq^UV /n㑘HEEZ{Çc)//gϞ;@dffR\\Lbb"={$==gyDaa!>,~W30F*{ct@ fZY.t]Qvڥ<9RZɓ>@]7..NYjbZoFy衇ժdee)]wo>\yG5k(J\\yfj*;vP~V=N>r-{ァdffgdd(zR[j*jU233=z(~W9VVRTTp ݻժ)yyyjUҔkFٹsoOqqqʧ~XV/TۡdeرjU,>VrݻWIMMUz̙3G]DSJJJ~mӧO+yyyʌ3jǒb[NN2`eJnn|jj[NZʺu'xBm޽{+W,{W+W*VUy'xBٸqbZaÆ)[nѣG>}>}Zӧr!e޼yʤIժ9..{1W8)SLQ~iuqqqJRRbZJXV%99Yի*{i&uSVag˙uϹu]=zT-VRNj*~oTL_ˮ]w 7ܠ.ݻwWX,j+((P~ 0EįǏ_'_/>]E9!((֭[~C||<:uvd߾}DDDAQQ;wf޽6^{-;vv.D@@K.!C0|n7 ,,>}nt:Ϛt4k֬) 7|~駳ر#IIIlٲFC```uMḰގ([pT @عs'_5xqdYd7VxT;Ҷm[t:z+?.nݺqaEq޽Irr2]t9g}<` 22:t֭[ٶm:L{e˖i^m?Ozu5\CFFEEEoLii);wV?F=:w.Ϗ(u`0p0p@N8AQQ:t`ܹ^yzL&-[UVDEEa68qaqHHH`"##y뭷`Ѵiӆ֭[^_ud0ԱB"##p\ǧ~ѣGG̛7ǏӤIQOnn.(\{̟?e˖1iҤsS\\FEEa(//*3Dqq1Ťz}N ZyMZ( 999g_Cpp0~~~ӷo_L&Zj4rHvMnn.aaadddoz WKCz&#!!cǎFٳ'_}M6wUb V\ʕ+y饗.>уt7n̑#Gko,O·~uh4H/n;wfܹ|,X}|1}tf̘ADDDey8U'@1w\i9*CCBB)))ǿ 4hЀ͛SXXȮ]޽; ހlذͦg@Y`=z`…mԫڸqc=>NNN& @Ѩ V+~FW\iߜY 6h}=jT%/cǎ,^jL82ҸԹ759Ϭ87 Çi޼+Gرw L&>C~gg$mѣGٸq#| ݺu#>>ԩS9|0[n| `ͤ c׮]гgOEa[fMuɡP\ddeeX` 88?>}#GMII LDDcƌԩS<Øfz}C=+V?S/p8x'jSӯ<^g}ٺu+:;w>.U_db֬Y0c :v?u޽{秞{u5*Ò`ƌC~~>Cd2QZZʔ)S3f ZG}g}Egx3{l;̙3Sϰ!-Z0a o&PϟOjj*k֬Ab0hڴW43ϰ`֭[>0!5zEQ$P+'Hv C]W'B^OPPiii4nXbi4V+N򺃭8&E䐒R%R  Ϫ$L!jVXJB\0!BB? EQlv\.zfVEa41Lr1-!j !ec9)=ygJQk63uqZks}|gܿ!AO! !e`wؼ?ߥRD1c2c1al{I/);̀n-Hҋ(q\ɾ?mtC !ԧ~i*6=#Z묒BY=0фFi[\1$.{ #++|BCCi޼9l6o¶RH| b"kUo uqn>\ BK>NǢ@B"c DgC7jhiqU۽W㑇d2QZZjp( . Aaa!(#=nwq2;I qūT^9++r}fgg_} 77·sy_Hu01z?3ZPhٻzQ^^`0n+m4 P__qm\6{m5 qQv;> ;w䮻bĈ8p[nՊbatEEEe?gsȐ!u璚ʨQ.x@G&4:-漗AjWv4Z efP ٓ|Vz&OxjhZ ~~~fLyӇ>1fB7&9s&7t_8p {dڰaO?4_|]ta] xF-6K/FQ p] ,-G7ۊ w=YYYQ^^fCQg&6gֻ@쳬iX"++<{ZնgIII| ?R d6i+isikiol*E^^EEEPRRByy9ٌ^d2@pp0:EQt ;=5.!ĹɩₔҼysbbb*/Op ESN{5D:u|@yo4i&N:1auL`ƌ:uO>'O2tPLRRYRy, Ç3tPu^x{ݻuVz-֮]KTT IDATWGyȄ =z47t7ofɘfvʻKII Æ {RXXSO=E~Ϊ͛2e z`>S"K}j4{9;v8q"EEE 6)((P( oɜ>} 7[oņ 0tޝ~VŋYlaaatEC9r$| ͚5;X.LNER9GejxWwQ ǿ3 I DP:"YPYׂ!UWtXXD˺»vE",$&d2L23?b&$8\?59y$CRYYIDLa'p3ig#;;KTT^H|>vV+$&&bٚ`0o.}:F^g$" 9"}^{ `2xG;w.| [neƍ,]?2&NkƗ_~/hTرc9S=z4sOujX-k׮|'̝;/~{fX>իWu;}uCzɧ~ʽ˜9s_|3f_v())aС̘1c4TXX /s=Ǽyxw|>Qѣf3O<_|| k֬a֭F\pӧOoTʕ+ٱc~!ӦMfOS\\+;_|A^^ ,`Ϟ=e֬Y|'DFBޡCnڶmϢ6XwY!MfAf3t0^tO8[Z͔E8"mciS[F||<~JJJ%;;Lp8Nڵk4fvTWWzMLL Rw$"0!Gt{9r$o1SO ""SO="j[KFFk֬!994n7gy&6lYujXݻwg,XܤO>ƅxݺu1UVe#L\| 0M6vZHJJvӧO# 4={nݺ&^~=)))s9iӦ\rQf;u@dd$;v?SܤB2220LdddPQQgtؑXӧk֬aƍzt ha̘1-[ UvA#G\avQG't . >>ɾ\[Mrr2NIJJt586o֭[ٶmݻ< (**"6ãn9bPךP\\̃>h3YiXzbĉ̜9~_|SN9ئO>L>lׯ'O&77hq\DEE`ZZ& [< ԵPiiMt f4,3+#33 nevޝiӦsN6l@Νnrssտ_~TTTfsOe&5ʈ.Nf&.B?wO _GEB,vP]xu8X,L&faZZPTTDJJ xBX,,AND„l 4={?c^uf-aX2d+V#iiiDEE-zX}eڴi[K ,ZEBB .l*q󏍍mRn}9v{-݈oɓ'c2;YNΝ… 9묳8쳙;wa 9s&^-[vO 0Z .\x}Oyy9|7dee`~hMa<YYYZm۶q9PXXwÇ~h+''[nŘ9r OJהغnSqg UXK m`(@=RcƆl6zr:wҾ}{:t@zz:8Nl6eee$')LZ|<|Gs=wy\veddd0vX֮]n8{2l0gx7g̙.d,2d6IMMm-I&qRXXDr|ny3oP4ɔ)Sعs'O</>d^{- ѩS'thimOWHRS)&=Clt]+" F_MeBp~233ꫯ>28Vn؉BZ\2],{qfXEAgtuȻDa)r9&Bv+3[qCHPcJr`HX&DDD$, """  „EaBDDD¢0 v愈֙8i_BB} k袋?~ѮϦ0q ;;w6y/ sqHQ8nfn7_5۷on#>>;P[[KUU_[[Kee%^h_yy9јZ6"""0q 6 ͛7}v.2N9y B={dܸqط믿ĉx<;͛7ЩS'~moν7OTDDNJ Ynܹ3<̙3gyxƍ}̟?Ed\.7ofȑу{Itt4m8l&뮻CZZ˗/o~޽Сٰa{`Ŋ׏tܙ؞458K/ /$77@ h8(++cСw}?~`0x/"" ռyYlڵkMNN0j(>c:,-[Ǝ;~1:usW1rssF~~>QQQٹs'cƌaƍ 2ٳgvZN=TJJJZmۖ˗C1|pyc~>""rrR8HMMjدJ6lM3`XHMM媫btЁ={zoٵkm۶'!!4:wLݏiI wS 3`a@0URDD~"""n>A :.h̄IaBDDD¢0!"""aQ(LHX&DDD$, """  Vc& QSS' Qdd2a۱lԭ/'"-&D)++cɒ%lڴ ǃ% aZX,DGGfk2N8ڷoOp8v|QcٳgqFðaHKK#&&@ @ii)yyyl߾$$$бcGRRRovsv @@ a֭r7SȡMi5gҤI\~|8***| PZZJnn.P#Fpx<cL}X,v;NGRRI俞„HUUUGu{Z xs{꿐UWWkqW3h ^/l6VkqvݸsȐ!׏?@ vXV"##޽;:t`&*((  j_?*;9U Kaa!Æ ;?cΜ9tܙS\\3F}x0͘fl68NcpeȐ!DEEzV & ٌ[nvmvT?„5{ꫯfŊ9jO?nj3oLJr۷?بnĴi0?P(磰kr璟oܨ6fol6#L Ӊl&  |\| mEEETWW7yQTT>SQ{-[8(LQ`8 ͛g5A@ee%fb޽\F*//o< R\\lvYYYzTTT=3g$''R BnKp`0HIIQ~sWWW? lUTT[onx~ X!115LgT79@ jeΜ9tڕ@ @QQnrzL&N'VATT111X,cP(Dmm-tЁ{6ʐٳ3g>c8"&&$y)LQ`y 曍mn7#F_W_}>E1l0ΨQ?5ɓ'#pEW_2n8~ߑ]G>|8<`_~ŤI3gnk֨ϥ^ 7Û\TnvygxG9r$ .4 o{8K.aĈ.z]wSO=GnF~lE]ⅷʦMHLL$;;|JJJ(..˅1NDFFfk$gz^N=T EEE|g~?1EEE~/_bf#55CNH&ضmtڕ>}tCSOa٘4icƌ3ak „ ].{f̙s=?|~ݻxbf3=s>c˖-l޼~W^y{Q]\.ǏGe\o2gnFә6m}Y\.?<9999|3df̘<`om6yG;w.| Wf֭;յ_|_~>_~x?// /7|ѣGGо}{~ߒg 0TUUOee%~rss&33,n7Nvt:P߂SQQAyy9nJJJ 7p:t ''O>FWFFÇ?LnA"2 9*,X瞋gС̟?n:ׯ7jf0`ݺu#99SO=ݻqFcݻAFFFlܸ.L&au0x`N?tu֑N޽6lʕ+ ==KY~!C5|@]v 22N:]@-Yf :t3fqWbŊF~_ЫW/\bccyp:7 ɤNzz:۷')) Ӊ#77ؼy3[ne۶mdffw^(((hhi07iԍթo֭r f1###k 4O˿I B|0sLn}A\.Ҍm۶br0., 555@_gx^v옆JKKoG"k6<4<.uY}+l6@@^{{RUUEff!ϯvxPٶTvsv8X,]?>j,**"%%Rrrrx3^-ZĠAFaaa}M&1]vdee۷P(Djjj#[ߓɓ1Le6,vqeLrr2眚JBBgnρP԰}yyy꫇}~m۶eΝ]vaو k l BS@I}+CQQ'== bcc)**r*++f|>̙hF7pAg܄B![lmCS7_k7o DDDvIIIZr:,"##9s&۶mc\tEG<3?? JJJXd w6KLLdŊMfy晘fNʮ]?ǀ(//g 8jfΜIff&ׯg׮]?8^z)vsӧOj2e233?~<<@7Tc?Jrrt]!W_}5 `ݺuzDDD?Yf1cƌFnj`ʔ)޽ɹ64|ަM&Mw}O1fbtؑÇ3rHj߾}|-P(D~~>͞n}P(Dyy9L81c.~?UUU|>***ˣSNtҥ-Bp,[q5{pORR7tS|0jԨf[Beee̟?Uo}.'.)Vc2p8ү_?; Fuu5~#Lʬohȩk / IDATl6dСFkˁ曉m4d21rHHHHhqӳgO 0CDZU}#b͚5A#H~*++ 9>, ׯbS HJJj6 l6Z 7oSEQVU:`y衇Xh[l1Vzl;{fxlVW}[laǎwyG~%"'usQƟg^}Urrr۷/DFFp8YQZZw}lfƶJ]['YjUUU\r%* &DJIIg壏>O?}ѦMp8x< ؾ};%%%\p 0X"x<JKKٳgtڕ=zED94C1LTTTl26oތlvڴiCJJJt8DDDCvС㐫D9RP9';9z&R7S'X0HX&DDD$, """  „EaBDDD¢"rBAu[օȉHaBD)dю"*qy|TjZjŹmTj6cwFï<+CBlt)" "r k|a.lC-ց=.xV޳Y!--nVӧo_t  -9\}f,0[0U-'SFM.#22Rϧ:vHJJ |6w߯G唴V8K9h94SDXJwbSN!" Gf ٌDX@U9OW[npPQQ磦P(D Rrss BqoտٷxL"&woMM ?\=@#6TNV &3a>B@xj9x^jkklXFwX,v;UUU޹y)zy:_+Xee%. ˅=)++7/"P۷n[p!]v7pGAA\sw8oT,v&t؏hkj&뮼{cYH&N`Æ c\z :P(Dyy9PK hZ(jtQjx?>7||㽃1|>`~ŋir+Y9A]zzeeeF=8UUUL>***Yl Hmm->t, Q\\lhxsl8ƌUVV6_[SH \0fûGrfV6,Ӓ v)//׋dtbZq8DEEb! Zbcc9^qA>}9M =x<FKVV^ロ .rƎK~~>~QF1j(/^ĉׯO?4>onYfuV /@߾}3fQ&??jNJnF.b6nHNNO>$& qsNBd2dy|>|GLfx7n~.nFX|9nn~w^=z4wMk.0ag}6s~-/"fs9'|}Gvv6`O2}tڴi9m… ұcG&NHJJ &M"//wy;vp=L4 ń 8p v{/{%0df?lذSq())=zpw2{l:tФ%; 1E֍8lfCRd]噕DD8v 7vf?zDEEznjIbb"6IX x^c%~eEĠ0qqӇ+W2c .,YBJJ o6555x<*++?~, {{/$ q)9nASOtR>;<.\8qqq|嗼+DGGSVVĉ:u*ݻw{e޼y\ve;nݺxٶmqqqL:}sϵzx饗ի3g/ =6mbرuY{o>xoРAÞ={}"##9S)((`Æ iӆ /L\\jGk׮%99N; Y~=;wfʕ,^fl0{.{fÆ ukגJFF^rJu@6m8S(,,dݺuӷo_.fj*ڶm˙gn+dŊ?kh}]|\zG.]X|9K.nKLL ?0͖雿҇ .Gv/C #xN\w\_Mqfbod_L`&99TIOO}$%%t:|]7of֭l۶LK^^y{Ҩe$j%  ѣ&L7fĉr뮻}{i\N?tƏϴix뭷8qzQ_Lbb"Ax "++ cCCnFӧgqO?qN?|Ar:F}jkk8߿QK0dԩdgg" QVVFZZmlllq\۵kG(_l)0uTvލ3Bhd؂2ǟ'z-PLk]X&M\~oQ4Cu7}7qHIIcbb۷iKDRYgśoɬY,[;v0ef3G 55]v59vjjj3}tL¤I8ԟoRRM߲w^^}Uf3 -7--vwj|X߂ طoQ[n&P^^^rQVVfРA 4)So0~g)<$qPfr4IE^VgxZ,&#]"m7oC ĤE5[F0 h 7ַ^/EEE߿t222˩͆۷o梋.l>?݆5߳w^c;;þ}x7޽;m۶eڵݻǃd"""\~ߵЕRW)uP5V >o)HdVbŴ8m4 PiԘa6eee\.JJJ(oߞ:Nrr2NFYY)Iϣ0q裏X|9_5| fngy[o[Cayؾ};?/2^筷W^izii)O?4z+@]7˩ʸqعs'>,W^y%y,_[nÁW_eӦM ԩ]tiB[kSfMzVDҍR˄[}`'sjqv쉊iY[ci?A{$8;S[[kL]Fpl&**8f#CV „-uȉcXN LM;QIغneq:0!W?TbZ$2Ѱbr:)d+%_MaB(Ν{!GlZY+7bL l#wG}>V+1]-[.^/555FF0l"Zrޟ]+"rP "rGE \FTLGط"{t KnM_d0fy@]kn>셫xvxlEe"G]M ȼ ݔ;'$& 3ⰦJ(P{Z/WԶk׎MUU\[կ~Wi9rٔ„„1a2af婦_jekk-c5E8IO`P\~cڴ8UP&R,c" i2[:5]X$;/r)L1 ȉG0EDD$, """  „EaBDDD¢"rTfnB!Vw,4X,^ȁ&DUUTTg^J555瓑qB HHHSN40MDZݻ#11@ pӈ臨vڝel6JKK)((}GaXYw?CcKaBD_Ed2c}n"΄/H0rjjw v:/hǣ @rS9\.WnV+/{~WPPV~o (--=vGq8u%yrUȱnlĈ@ݨ~dpojL<Ϲ[_`w}o,ZUʒ$xP9Cɓq8w}{~)UUUDDD4{qp\a6 ԅOTTT_YYohӦM^/^p7g3>DĠ"A0d̘1\q\~<{V^{-\r +Vhw͆ K7|I|o~O02q>.ܼ\9m۶_#>P(ċ/mF0}0~xgy 2}tv;x<tc=̜9s4hiii\wuF+>ӷo_47p0>-[쨗9dȐ.]XP˄qҫW/L&mڴcǎ]xᅘL& oo߾}پ};k֬kaժUB!l™ghӱcG_|A <#DEEѹ\.~(Pȱ  2c 233$++`6 >>hy>}{>}:{%::F3F{5\ p8Ŵ%^^}U.bbbxv2؉Vf0z};YEDD,|?=@0t2]\Q˄I9DRw͇22!"N4„4B1 yTA"jPj6m 2o7o0LE"nj„J6mؿ?ǻ:M|>|>^,3 GrrQ/K! iU:u"//;v5ZPN2IIIMVL9&DՄB!l6;vcǎǻ:'16DNn "Ҫt!9h6EaBDDD¢0!"""aQ(LHX&DDD$, """  „EaBDDD¢0!"""aQ(LHX&DDD$, """  „EaBDDD¢0!"""aQ(LHX&DDD$, """  „EaBDDD¢0!"""aQ(LHX&DDD$, """  „EaBDDD¢0!"""aQ(LHX&DDD$, """  „EaBDDD¢0!"""aQ(LHX&DDD$, """  „EaBDDD¢0!"""aQ(LHX&DDD$, """  „EaBDDD¢0!"""aQ(LHX&DDD$, """  „EaBDDD¢0!"""aQ(LHX&DDD$,]_P(t ""_C-"""  „EaBDDD¢0!"""aQqk 0IDAT(LHX&DDD$, """  n9|j(LHX&DDD$, """  „EaBDDD¢0!"""aQ(LHXv3S˄EaBDDD¢0!"""aQ(LHX&DDD$, """  „o~B,=8#i )+h& MPaFZ5n*.!]ō@pH] 6@aD86W 3I9bqFԌq{>y?"9w33@1@1@1@1qL+R,&t<11 Nrԩ9r$W@wmnll,뮻ۻԛqN>}XHb9s&Z-V9sRoRGT*YlYn挏69^V-tFj:1@s\@LhBb].aRoF[.S :y駗pkX*ڵ+yFGG388-[d͚5Ki,1{wH^{ g߾}ӧݾnu9>9X|gٱcGT*Y&vy~WygaÆl۶mGɋ/ 6dӦMo$_~e6oޜ'|2.ʘ::Ee?o=+WE܎Cey뭷vڼ;uٳ'裏reǎyz9s0et':pY&1CLt:˖-xfD̙3࠙6 VTrwSu388!3;mZRoJGk4jbMb5oK3G'f粃Ƌb,;¸1ML'fSB-\qHm i,B"ImUFZ99& F:d[ekllhrؑtqPtkLo $wߓ]Spo_I~x1WHtэ1q%9K/j1RVGl~7Idj/(NN683؛QO?%5ӿ<p+INfjF~93qmgwUL$EsiEk:pvL4#9]ِ,]I^h4AѺ4Us#$Kc֯[g* Bb6u1x8g{$9?gYf(f]8+tiL$3ALEhD=f#|A1sH[C"s&fh}hF5#!&h>ltyH$b"ɜAЫ6@[@8׍!DL̘#(Z3\.v&&Z D<p9=Y]{4wG 1.Z.mCX Hĥ@ 3p u㧆 1q(bf("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b("&"b(>h㈕`IENDB`granite-0.3.0/doc/images/ModeButton.png000644 001750 001750 00000005654 12340443640 021461 0ustar00shnatselshnatsel000000 000000 PNG  IHDR(v pHYs B(xtIME*!鶘 KIDATx][H~ffgVnfkRFFZvhuD tHTEeE^TFAWuAtk$C<53g]gc3};w0`_PY[[[C  ?L`pՀ 0jAV!Dz,xW/a4 X,U IR zj1R903lVHӧO"f3N'RSSUiyx^ŢHwJW|>ݍtɺ$IL4 $I(5Fkytvv"773gTU0؈,L& ,֯_j??~DGGf̘$U飳nv=."ٳu 0 fddd 99YhN֡!\.p` #ϟ?W $6HD6G "336 4MJqAMycYUl[-%l6Co$ UĔ_/ǡ YT$B6UKŴtr%jZFVVﴌb?jFx#6](ㆬIneeesip,zSݕꭹs̉hϞ=CAA9Vzc#kruAXYY9NкьV|[&έhb3uF޾}L먪ĉöyM̟?Ld$ӧOx@Q2220k֬1/9sEEE(jLc+# ȥ>cu7VDٳUUUQ#ɯ)544`֭A$׮]CT5GAAM&;qr2\zvɸu|>jjj5fU!d ޽{ 6Ht:҂yaǎ0qPM^c;wĝ;wԄ|ׁ:k&,x^444!55SLbCQTPn4NAo0c ~n###}}}Az(j^/x`!kBL8!??y ظq#hjsƍ0LX,(//GG05 l׋V.JNǏ+nO9lta߿ø}66oތ ڤu8R <#%%8ݽ{w~?~?֬Yu=PQQfEEŋcɒ%aD0Z'Zy8ˡԱڑUrD"t|7o`„ ضm,X K %zP$NSiYՔM'zXv-֯_/ Y~MN\OҵZA4x,77=H%m_oKdb n*(˲0ͪzVGC)ă4M)fLŪAXĈA 55/^@vv $Ie٨%j},fv՜Ap8hmm C1,v8q5 À8x<,ժ")}8$%%iE VhZaZߏ޸zUv4Ml619ѣGU\*K?/O[m6[ I4MPEQ +iZݟFB"g8!0`@!Y -07U 狋3VXV2sPIENDB`granite-0.3.0/INSTALL000644 001750 001750 00000001034 12340443640 015676 0ustar00shnatselshnatsel000000 000000 Installation Instructions ------------------------- • Build Granite 1) Grab the source: $ bzr branch lp:granite 2) Configure: $ cd granite $ mkdir build $ cd build $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr 3) Build library and demo application: $ make 4) Install (may need root privileges, e.g. using 'sudo') # make install 5) Build API documentation (optional) • Vala API: $ make valadocs • C API: $ make cdocs • Both targets: $ make docs granite-0.3.0/CMakeLists.txt000644 001750 001750 00000003663 12340443640 017417 0ustar00shnatselshnatsel000000 000000 # Check http://webdev.elementaryos.org/docs/developer-guide/cmake for documentation cmake_minimum_required (VERSION 2.8) cmake_policy (VERSION 2.8) project (granite C) set (PKG_NAME ${CMAKE_PROJECT_NAME}) set (PKG_VERSION 0.3.0) set (API_VERSION 1.0) # Used to create GObject introspection files set (PKG_GIR_NAME Granite) list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/) set (RESOURCES_DIR ${CMAKE_INSTALL_PREFIX}/share/${PKG_NAME}/) set (GETTEXT_PACKAGE ${PKG_NAME}) set (CPACK_PACKAGE_VERSION ${PKG_VERSION}) set (CPACK_SOURCE_GENERATOR "TGZ") set (CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}") set (CPACK_SOURCE_IGNORE_FILES "/build/;/.bzr/;/.bzrignore;~$;${CPACK_SOURCE_IGNORE_FILES}") include (CPack) add_custom_target (dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source) find_package (Vala REQUIRED) include (ValaVersion) include (ValaPrecompile) ensure_vala_version ("0.23.2" MINIMUM) # # Packages in PKG_DEPS are used with the vala compiler and other related tools (not versioned.) # Packages in PKG_DEPS_CHECK are used with PKG-Config and for linking, etc. They can contain versions. # # Both should contain *the same packages*, except for those whose VAPI file has a different name. In # such case, PKG_DEPS would use the name of the VAPI, and PKG_DEPS_CHECK would use the name of the # package known by pkg-config. # set (PKG_DEPS gtk+-3.0 gio-unix-2.0 posix gee-0.8) set (PKG_DEPS_CHECK gtk+-3.0>=3.11.6 gio-unix-2.0 gthread-2.0 gee-0.8) # GI dependencies set (GI_PKG_DEPS Gtk-3.0 Gee-0.8) # Check for the deps find_package (PkgConfig) pkg_check_modules (DEPS REQUIRED ${PKG_DEPS_CHECK}) set (VALAC_OPTIONS --thread --target-glib=2.32) if (CMAKE_SYSTEM_NAME MATCHES "Linux") set (VALAC_OPTIONS ${VALAC_OPTIONS} --define=LINUX) endif () add_subdirectory (lib) add_subdirectory (demo) add_subdirectory (doc) add_subdirectory (po) add_subdirectory (icons)granite-0.3.0/AUTHORS000644 001750 001750 00000001201 12340443640 015711 0ustar00shnatselshnatsel000000 000000 Granite: A development library for elementary development. Primary Contact --------------- elementary Team Developers ---------- ammonkey Avi Romanoff Cody Garver Corentin Noël Daniel Foré Devid Antonio Filoni aka devfil Elias aka eyelash Lucas Baudin Marcus Lundgren Mario Guerriero Mathijs Henquet Maxwell Barvian Rico Tzschichholz Robert Dyer Tom Beckmann Tristan Cormier ttosttos Victor Eduardo Adam Davies ... and everyone who contributed. granite-0.3.0/demo/CMakeLists.txt000644 001750 001750 00000001221 12340443640 020327 0ustar00shnatselshnatsel000000 000000 include_directories (${CMAKE_CURRENT_BINARY_DIR}/../lib) set (CMAKE_INCLUDE_CURRENT_DIR ON) set (CFLAGS ${DEPS_CFLAGS} ${DEPS_CFLAGS_OTHER} ) set (LIB_PATHS ${DEPS_LIBRARY_DIRS}) link_directories (${LIB_PATHS} ${CMAKE_CURRENT_BINARY_DIR}/../lib) add_definitions (${CFLAGS}) set (EXEC_NAME ${PKG_NAME}-demo) vala_precompile (VALA_C ${EXEC_NAME} GraniteDemo.vala CUSTOM_VAPIS ${CMAKE_CURRENT_BINARY_DIR}/../lib/${PKG_NAME}.vapi PACKAGES ${PKG_DEPS} OPTIONS ${VALAC_OPTIONS} ) add_executable (${EXEC_NAME} ${VALA_C}) target_link_libraries (${EXEC_NAME} ${PKG_NAME} ${DEPS_LIBRARIES}) install (TARGETS ${EXEC_NAME} RUNTIME DESTINATION bin) granite-0.3.0/demo/GraniteDemo.vala000644 001750 001750 00000043624 12340443640 020647 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Lucas Baudin , Jaap Broekhuizen , Victor Eduardo , Tom Beckmann This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ public class Granite.Demo : Granite.Application { /** * Small helper class for constructing labels a bit faster. */ private class LLabel : Gtk.Label { public LLabel (string label) { this.label = label; halign = Gtk.Align.START; } public LLabel.indent (string label) { this.label = label; margin_left = 12; } public LLabel.markup (string label) { this.label = label; use_markup = true; } public LLabel.right (string label) { this.label = label; halign = Gtk.Align.END; } public LLabel.right_with_markup (string label) { this.label = label; halign = Gtk.Align.END; } } private class SourceListExpandableItem : Granite.Widgets.SourceList.ExpandableItem { public SourceListExpandableItem (string name) { base (name); } public override int compare (Granite.Widgets.SourceList.Item a, Granite.Widgets.SourceList.Item b) { return strcmp (a.name, b.name); } } /** * SourceList item. It stores the number of the corresponding page in the notebook widget. */ private class SourceListItem : Granite.Widgets.SourceList.Item { public int page_num { get; set; default = -1; } private static Icon? themed_icon; public SourceListItem (string title) { base (title); editable = true; if (themed_icon == null) themed_icon = new ThemedIcon.with_default_fallbacks ("help-info-symbolic"); icon = themed_icon; } } private Gtk.Grid main_layout; // outer-most container private Granite.Widgets.ModeButton mode_button; private int dark_mode_index; /** * Basic app information for Granite.Application. This is used by the About dialog. */ construct { application_id = "org.pantheon.granite.demo"; flags = ApplicationFlags.FLAGS_NONE; program_name = "Granite Demo"; app_years = "2011 - 2013"; build_version = "0.2.3"; app_icon = "text-editor"; main_url = "https://launchpad.net/granite"; bug_url = "https://bugs.launchpad.net/granite"; help_url = "https://answers.launchpad.net/granite"; translate_url = "https://translations.launchpad.net/granite"; about_documenters = { null }; about_artists = { "Daniel P. Fore " }; about_authors = { "Maxwell Barvian ", "Daniel Foré ", "Avi Romanoff ", "Lucas Baudin ", "Victor Eduardo ", "Tom Beckmann ", }; about_comments = "A demo of the Granite toolkit"; about_translators = "Launchpad Translators"; about_license_type = Gtk.License.GPL_3_0; } public override void activate () { var window = new Gtk.Window (); window.title = "Granite Demo"; window.window_position = Gtk.WindowPosition.CENTER; this.add_window (window); var main_toolbar = new Gtk.Toolbar (); main_toolbar.get_style_context ().add_class (Gtk.STYLE_CLASS_PRIMARY_TOOLBAR); main_toolbar.hexpand = true; main_toolbar.vexpand = false; // SourceList var sidebar = new Granite.Widgets.SourceList (); sidebar.width_request = 200; var page_switcher = new Gtk.Notebook (); page_switcher.show_tabs = false; page_switcher.show_border = false; page_switcher.expand = true; sidebar.item_selected.connect ((item) => { var sidebar_item = item as SourceListItem; assert (sidebar_item != null); page_switcher.set_current_page (sidebar_item.page_num); }); // Main sidebar categories var widgets_category = new SourceListExpandableItem ("Widgets"); var services_category = new SourceListExpandableItem ("Services"); // Add and expand categories sidebar.root.add (widgets_category); sidebar.root.add (services_category); sidebar.root.expand_all (); var sidebar_paned = new Granite.Widgets.ThinPaned (); sidebar_paned.pack1 (sidebar, true, false); sidebar_paned.pack2 (page_switcher, true, false); sidebar_paned.expand = true; // Statusbar var statusbar = new Granite.Widgets.StatusBar (); statusbar.set_text ("Granite.Widgets.StatusBar"); statusbar.hexpand = true; statusbar.vexpand = false; // Main widget structure main_layout = new Gtk.Grid (); main_layout.expand = true; main_layout.orientation = Gtk.Orientation.VERTICAL; main_layout.add (main_toolbar); main_layout.add (sidebar_paned); main_layout.add (statusbar); window.add (main_layout); // Welcome widget var welcome_screen = create_welcome_screen (); var welcome_item = new SourceListItem ("Welcome"); widgets_category.add (welcome_item); welcome_item.page_num = page_switcher.append_page (welcome_screen, null); // Select welcome widget sidebar.selected = welcome_item; // Light window var light_window_icon = new Gtk.Image.from_icon_name ("document-new", Gtk.IconSize.LARGE_TOOLBAR); var light_window_item = new Gtk.ToolButton (light_window_icon, "Show LightWindow"); light_window_item.icon_name = "document-new"; light_window_item.tooltip_text = "Show Light Window"; light_window_item.halign = light_window_item.valign = Gtk.Align.CENTER; light_window_item.clicked.connect (show_light_window); main_toolbar.insert (light_window_item, -1); // StaticNotebook var staticnotebook = new Granite.Widgets.StaticNotebook (); var pageone = new Gtk.Label ("Page 1"); staticnotebook.append_page (new Gtk.Label ("Page 1"), pageone); staticnotebook.append_page (get_overlay_bar_widget (), new Gtk.Label ("Overlay Bar")); staticnotebook.append_page (new Gtk.Label ("Page 3"), new Gtk.Label ("Page 3")); staticnotebook.page_changed.connect (() => { pageone.set_text ("Page changed"); }); var static_notebook_item = new SourceListItem ("StaticNotebook"); static_notebook_item.page_num = page_switcher.append_page (staticnotebook, null); widgets_category.add (static_notebook_item); // ModeButton mode_button = new Granite.Widgets.ModeButton (); mode_button.valign = Gtk.Align.CENTER; mode_button.halign = Gtk.Align.CENTER; var normal_mode_index = mode_button.append (new Gtk.Label ("Light")); dark_mode_index = mode_button.append (new Gtk.Label ("Dark")); mode_button.selected = normal_mode_index; on_theme_mode_button_changed (); mode_button.mode_changed.connect (on_theme_mode_button_changed); var mode_button_item = new Gtk.ToolItem (); mode_button_item.add (mode_button); main_toolbar.insert (mode_button_item, -1); mode_button_item.halign = mode_button_item.valign = Gtk.Align.CENTER; // PopOvers var popover_statusbar_item = new Gtk.Button (); popover_statusbar_item.relief = Gtk.ReliefStyle.NONE; popover_statusbar_item.tooltip_text = "Show PopOver"; popover_statusbar_item.add (new Gtk.Image.from_icon_name ("help-info-symbolic", Gtk.IconSize.MENU)); statusbar.insert_widget (popover_statusbar_item); popover_statusbar_item.clicked.connect (() => { var pop = new Granite.Widgets.PopOver (); var pop_hbox = pop.get_content_area () as Gtk.Container; pop_hbox.add (new Granite.Widgets.HintedEntry ("This is an HintedEntry")); pop_hbox.add (new Gtk.Label ("Another label")); var mode_pop = new Granite.Widgets.ModeButton (); mode_pop.append (new Gtk.Label ("Mode 1")); mode_pop.append (new Gtk.Label ("Mode 2")); mode_pop.append (new Gtk.Label ("Mode 3")); pop_hbox.add (mode_pop); pop_hbox.add (new Granite.Widgets.DatePicker ()); pop.set_parent_pop (window); pop.move_to_widget (popover_statusbar_item); pop.show_all (); pop.present (); pop.run (); pop.destroy (); }); // Date widget var calendar_tool_item = new Gtk.ToolItem (); calendar_tool_item.margin_left = 12; var date_button = new Granite.Widgets.DatePicker.with_format ("%d-%m-%y"); calendar_tool_item.add (date_button); main_toolbar.insert (calendar_tool_item, -1); // Time widget var time_tool_item = new Gtk.ToolItem (); time_tool_item.margin_left = 12; time_tool_item.valign = Gtk.Align.CENTER; var time_button = new Granite.Widgets.TimePicker (); time_tool_item.add (time_button); main_toolbar.insert (time_tool_item, -1); // Dynamic notebook var dynamic_notebook = create_dynamic_notebook (); var dynamic_notebook_item = new SourceListItem ("DynamicNotebook"); widgets_category.add (dynamic_notebook_item); dynamic_notebook_item.page_num = page_switcher.append_page (dynamic_notebook, null); var right_sep = new Gtk.SeparatorToolItem (); right_sep.draw = false; right_sep.set_expand (true); main_toolbar.insert (right_sep, -1); // Search Entry var search_entry = new Granite.Widgets.SearchBar ("Search"); var search_item = new Gtk.ToolItem (); search_item.add (search_entry); search_item.margin_left = 12; main_toolbar.insert (search_item, -1); // App Menu (this gives access to the About dialog) var main_menu = create_appmenu (new Gtk.Menu ()); main_menu.margin_left = 12; main_toolbar.insert (main_menu, -1); window.set_default_size (800, 550); window.show_all (); } private void on_theme_mode_button_changed () { var settings = Gtk.Settings.get_default (); settings.gtk_application_prefer_dark_theme = (mode_button.selected == dark_mode_index); } private Granite.Widgets.Welcome create_welcome_screen () { var welcome = new Granite.Widgets.Welcome ("Granite's Welcome Screen", "This Is Granite's Welcome Widget."); Gdk.Pixbuf? pixbuf = null; try { pixbuf = Gtk.IconTheme.get_default ().load_icon ("document-new", 48, Gtk.IconLookupFlags.GENERIC_FALLBACK); } catch (Error e) { warning ("Could not load icon, %s", e.message); } Gtk.Image? image = new Gtk.Image.from_icon_name ("document-open", Gtk.IconSize.DIALOG); // Adding elements. Use the most convenient method to add an icon welcome.append_with_pixbuf (pixbuf, "Create", "Write a new document."); welcome.append_with_image (image, "Open", "Select a file."); welcome.append ("document-save", "Save", "With a much longer description."); return welcome; } private void show_light_window () { var light_window = new Granite.Widgets.LightWindow (); var light_window_notebook = new Granite.Widgets.StaticNotebook (); var entry = new Gtk.Entry (); var open_drop = new Gtk.ComboBoxText (); var open_lbl = new LLabel ("Alwas Open Mpeg Video Files with Audience"); var grid = new Gtk.Grid (); grid.attach (new Gtk.Image.from_icon_name ("video-x-generic", Gtk.IconSize.DIALOG), 0, 0, 1, 2); grid.attach (entry, 1, 0, 1, 1); grid.attach (new LLabel ("1.13 GB, Mpeg Video File"), 1, 1, 1, 1); grid.attach (light_window_notebook, 0, 2, 2, 1); var general = new Gtk.Grid (); general.attach (new LLabel.markup ("Info:"), 0, 0, 2, 1); general.attach (new LLabel.right ("Created:"), 0, 1, 1, 1); general.attach (new LLabel.right ("Modified:"), 0, 2, 1, 1); general.attach (new LLabel.right ("Opened:"), 0, 3, 1, 1); general.attach (new LLabel.right ("Mimetype:"), 0, 4, 1, 1); general.attach (new LLabel.right ("Location:"), 0, 5, 1, 1); general.attach (new LLabel ("Today at 9:50 PM"), 1, 1, 1, 1); general.attach (new LLabel ("Today at 9:50 PM"), 1, 2, 1, 1); general.attach (new LLabel ("Today at 10:00 PM"), 1, 3, 1, 1); general.attach (new LLabel ("video/mpeg"), 1, 4, 1, 1); general.attach (new LLabel ("/home/daniel/Downloads"), 1, 5, 1, 1); general.attach (new LLabel.markup ("Open with:"), 0, 6, 2, 1); general.attach (open_drop, 0, 7, 2, 1); general.attach (open_lbl, 0, 8, 2, 1); light_window_notebook.append_page (general, new Gtk.Label ("General")); light_window_notebook.append_page (new Gtk.Label ("More"), new Gtk.Label ("More")); light_window_notebook.append_page (new Gtk.Label ("Sharing"), new Gtk.Label ("Sharing")); open_lbl.margin_left = 24; open_drop.margin_left = 12; open_drop.append ("audience", "Audience"); open_drop.active = 0; grid.margin = 12; grid.margin_top = 24; grid.margin_bottom = 24; entry.text = "Cool Hand Luke"; general.column_spacing = 6; general.row_spacing = 6; light_window.add (grid); light_window.show_all (); } private Granite.Widgets.DynamicNotebook create_dynamic_notebook () { int i = 3; var dynamic_notebook = new Granite.Widgets.DynamicNotebook (); dynamic_notebook.allow_duplication = true; dynamic_notebook.allow_restoring = true; dynamic_notebook.max_restorable_tabs = 5; dynamic_notebook.allow_pinning = true; dynamic_notebook.show_icons = true; dynamic_notebook.add_button_tooltip = "New user tab"; var tab = new Granite.Widgets.Tab ("user1@elementaryos: ~", new ThemedIcon ("empty"), new Gtk.Label ("Page 1")); tab.restore_data = "1"; tab.working = true; dynamic_notebook.insert_tab (tab, -1); var tab2 = new Granite.Widgets.Tab ("user2@elementaryos: ~", new ThemedIcon ("empty"), new Gtk.Label ("Page 2")); tab2.restore_data = "2"; dynamic_notebook.insert_tab (tab2, -1); dynamic_notebook.new_tab_requested.connect (() => { var t = new Granite.Widgets.Tab (@"user$i@elementaryos: ~", new ThemedIcon ("empty"), new Gtk.Label (@"Page $i")); t.restore_data = i.to_string (); i++; dynamic_notebook.insert_tab (t, -1); }); dynamic_notebook.tab_restored.connect ((label, data, icon) => { var t = new Granite.Widgets.Tab (label, icon, new Gtk.Label ("Page " + data)); t.restore_data = data; dynamic_notebook.insert_tab (t, -1); print ("Restored tab %s\n", label); }); dynamic_notebook.tab_duplicated.connect ((t) => { var num = t.restore_data; var t2 = new Granite.Widgets.Tab (@"user$num@elementaryos: ~", new ThemedIcon ("empty"), new Gtk.Label (@"Page $num")); t2.restore_data = t.restore_data; dynamic_notebook.insert_tab (t2, -1); print ("Duplicated tab %s\n", t2.label); }); dynamic_notebook.tab_moved.connect ((t, p) => { print ("Moved tab %s to %i\n", t.label, p); }); dynamic_notebook.tab_switched.connect ((old_t, new_t) => { print ("Switched from %s to %s\n", old_t.label, new_t.label); }); dynamic_notebook.tab_removed.connect ((t) => { print ("Removed tab %s\n", t.label); }); return dynamic_notebook; } private Gtk.Widget get_overlay_bar_widget () { // OverlayBar (inside StaticNotebook) var overlay = new Gtk.Overlay (); overlay.add (new Gtk.Label ("Try to touch the Overlay Bar!")); var overlay_bar = new Granite.Widgets.OverlayBar (overlay); overlay_bar.status = "Overlay Bar Example"; return overlay; } public static int main (string[] args) { var application = new Granite.Demo (); return application.run (args); } } granite-0.3.0/icons/CMakeLists.txt000644 001750 001750 00000001315 12340443640 020522 0ustar00shnatselshnatsel000000 000000 install(FILES 16x16/application-menu.svg DESTINATION share/icons/hicolor/16x16/actions/) install(FILES 16x16/appointment.svg DESTINATION share/icons/hicolor/16x16/actions/) install(FILES 22x22/application-menu.svg DESTINATION share/icons/hicolor/22x22/actions/) install(FILES 24x24/application-menu.svg DESTINATION share/icons/hicolor/24x24/actions/) install(FILES 24x24/appointment.svg DESTINATION share/icons/hicolor/24x24/actions/) install(FILES 32x32/application-menu.svg DESTINATION share/icons/hicolor/32x32/actions/) install(FILES 48x48/application-menu.svg DESTINATION share/icons/hicolor/48x48/actions/) install(FILES scalable/application-menu-symbolic.svg DESTINATION share/icons/hicolor/scalable/actions/) granite-0.3.0/icons/16x16/appointment.svg000644 001750 001750 00000013245 12340443640 021633 0ustar00shnatselshnatsel000000 000000 image/svg+xml granite-0.3.0/icons/16x16/application-menu.svg000644 001750 001750 00000012402 12340443640 022534 0ustar00shnatselshnatsel000000 000000 granite-0.3.0/icons/22x22/application-menu.svg000644 001750 001750 00000024300 12340443640 022526 0ustar00shnatselshnatsel000000 000000 image/svg+xml granite-0.3.0/icons/scalable/application-menu-symbolic.svg000644 001750 001750 00000010741 12340443640 025340 0ustar00shnatselshnatsel000000 000000 Gnome Symbolic Icon Theme image/svg+xml Gnome Symbolic Icon Theme granite-0.3.0/icons/32x32/application-menu.svg000644 001750 001750 00000027575 12340443640 022551 0ustar00shnatselshnatsel000000 000000 image/svg+xml granite-0.3.0/icons/24x24/appointment.svg000644 001750 001750 00000020536 12340443640 021632 0ustar00shnatselshnatsel000000 000000 image/svg+xml granite-0.3.0/icons/24x24/application-menu.svg000644 001750 001750 00000036644 12340443640 022550 0ustar00shnatselshnatsel000000 000000 image/svg+xml granite-0.3.0/icons/48x48/application-menu.svg000644 001750 001750 00000014400 12340443640 022546 0ustar00shnatselshnatsel000000 000000 granite-0.3.0/NEWS000644 001750 001750 00000000000 12340443640 015334 0ustar00shnatselshnatsel000000 000000 granite-0.3.0/README000644 001750 001750 00000001246 12340443640 015532 0ustar00shnatselshnatsel000000 000000 Granite ------- Granite is a development library for elementary development. Granite is an extension to GTK. Among other things, it provides the commonly-used widgets such as modeswitchers, welcome screens, AppMenus, search bars, and more found in elementary apps. Documentation ------------- You can find the valadoc for Granite (documentation on all classes and functions) at: http://valadoc.elementaryos.org/Granite/index.htm Bugs ---- If you find bugs while installing or in Granite itself, please report them at: https://launchpad.net/granite/+filebug License ------- Granite is licensed under LGPLv3+. See the COPYING file for more information about copyrights. granite-0.3.0/cmake/FindVala.cmake000644 001750 001750 00000005331 12340443640 020417 0ustar00shnatselshnatsel000000 000000 ## # Copyright 2009-2010 Jakob Westhoff. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # The views and conclusions contained in the software and documentation are those # of the authors and should not be interpreted as representing official policies, # either expressed or implied, of Jakob Westhoff ## ## # Find module for the Vala compiler (valac) # # This module determines wheter a Vala compiler is installed on the current # system and where its executable is. # # Call the module using "find_package(Vala) from within your CMakeLists.txt. # # The following variables will be set after an invocation: # # VALA_FOUND Whether the vala compiler has been found or not # VALA_EXECUTABLE Full path to the valac executable if it has been found # VALA_VERSION Version number of the available valac ## # Search for the valac executable in the usual system paths. find_program(VALA_EXECUTABLE NAMES valac) # Handle the QUIETLY and REQUIRED arguments, which may be given to the find call. # Furthermore set VALA_FOUND to TRUE if Vala has been found (aka. # VALA_EXECUTABLE is set) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Vala DEFAULT_MSG VALA_EXECUTABLE) mark_as_advanced(VALA_EXECUTABLE) # Determine the valac version if(VALA_FOUND) execute_process(COMMAND ${VALA_EXECUTABLE} "--version" OUTPUT_VARIABLE "VALA_VERSION") string(REPLACE "Vala" "" "VALA_VERSION" ${VALA_VERSION}) string(STRIP ${VALA_VERSION} "VALA_VERSION") endif(VALA_FOUND) granite-0.3.0/cmake/GSettings.cmake000644 001750 001750 00000003677 12340443640 020655 0ustar00shnatselshnatsel000000 000000 # GSettings.cmake, CMake macros written for Marlin, feel free to re-use them. option (GSETTINGS_LOCALINSTALL "Install GSettings Schemas locally instead of to the GLib prefix" ON) option (GSETTINGS_COMPILE "Compile GSettings Schemas after installation" ${GSETTINGS_LOCALINSTALL}) if(GSETTINGS_LOCALINSTALL) message(STATUS "GSettings schemas will be installed locally.") endif() if(GSETTINGS_COMPILE) message(STATUS "GSettings shemas will be compiled.") endif() macro(add_schema SCHEMA_NAME) set(PKG_CONFIG_EXECUTABLE pkg-config) # Have an option to not install the schema into where GLib is if (GSETTINGS_LOCALINSTALL) SET (GSETTINGS_DIR "${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas/") else (GSETTINGS_LOCALINSTALL) execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} glib-2.0 --variable prefix OUTPUT_VARIABLE _glib_prefix OUTPUT_STRIP_TRAILING_WHITESPACE) SET (GSETTINGS_DIR "${_glib_prefix}/share/glib-2.0/schemas/") endif (GSETTINGS_LOCALINSTALL) # Run the validator and error if it fails execute_process (COMMAND ${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable glib_compile_schemas OUTPUT_VARIABLE _glib_comple_schemas OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process (COMMAND ${_glib_comple_schemas} --dry-run --schema-file=${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NAME} ERROR_VARIABLE _schemas_invalid OUTPUT_STRIP_TRAILING_WHITESPACE) if (_schemas_invalid) message (SEND_ERROR "Schema validation error: ${_schemas_invalid}") endif (_schemas_invalid) # Actually install and recomple schemas message (STATUS "GSettings schemas will be installed into ${GSETTINGS_DIR}") install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/${SCHEMA_NAME} DESTINATION ${GSETTINGS_DIR} OPTIONAL) if (GSETTINGS_COMPILE) install (CODE "message (STATUS \"Compiling GSettings schemas\")") install (CODE "execute_process (COMMAND ${_glib_comple_schemas} ${GSETTINGS_DIR})") endif () endmacro() granite-0.3.0/cmake/Translations.cmake000644 001750 001750 00000003231 12340443640 021411 0ustar00shnatselshnatsel000000 000000 # Translations.cmake, CMake macros written for Marlin, feel free to re-use them macro(add_translations_directory NLS_PACKAGE) add_custom_target (i18n ALL COMMENT “Building i18n messages.”) find_program (MSGFMT_EXECUTABLE msgfmt) file (GLOB PO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.po) foreach (PO_INPUT ${PO_FILES}) get_filename_component (PO_INPUT_BASE ${PO_INPUT} NAME_WE) set (MO_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PO_INPUT_BASE}.mo) add_custom_command (TARGET i18n COMMAND ${MSGFMT_EXECUTABLE} -o ${MO_OUTPUT} ${PO_INPUT}) install (FILES ${MO_OUTPUT} DESTINATION share/locale/${PO_INPUT_BASE}/LC_MESSAGES RENAME ${NLS_PACKAGE}.mo) endforeach (PO_INPUT ${PO_FILES}) endmacro(add_translations_directory) macro(add_translations_catalog NLS_PACKAGE) add_custom_target (pot COMMENT “Building translation catalog.”) find_program (XGETTEXT_EXECUTABLE xgettext) set(C_SOURCE "") foreach(FILES_INPUT ${ARGN}) file (GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT}/*.c) foreach(C_FILE ${SOURCE_FILES}) set(C_SOURCE ${C_SOURCE} ${C_FILE}) endforeach() file (GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${FILES_INPUT}/*.vala) foreach(C_FILE ${SOURCE_FILES}) set(C_SOURCE ${C_SOURCE} ${C_FILE}) endforeach() endforeach() add_custom_command (TARGET pot COMMAND ${XGETTEXT_EXECUTABLE} -d ${NLS_PACKAGE} -o ${CMAKE_CURRENT_SOURCE_DIR}/${NLS_PACKAGE}.pot ${VALA_SOURCE} ${C_SOURCE} --keyword="_" --keyword="N_" --from-code=UTF-8 --add-comments="/" ) endmacro()granite-0.3.0/cmake/README.Vala.rst000644 001750 001750 00000011661 12340443640 020305 0ustar00shnatselshnatsel000000 000000 ========== Vala CMake ========== :Author: Jakob Westhoff :Version: Draft Overview ======== Vala CMake is a collection of macros for the CMake_ build system to allow the creation and management of projects developed using the Vala_ programming language or its "Genie" flavor (less tested). Installation ============ To use the Vala macros in your own project you need to copy the macro files to an arbitrary folder in your projects directory and reference them in your ``CMakeLists.txt`` file. Assuming the macros are stored under ``cmake/vala`` in your projects folder you need to add the following information to your base ``CMakeLists.txt``:: list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/vala ) After the new module path as been added you can simply include the provided modules or use the provided find routines. Finding Vala ============ The find module for vala works like any other Find module in CMake. You can use it by simply calling the usual ``find_package`` function. Default parameters like ``REQUIRED`` and ``QUIETLY`` are supported. :: find_package(Vala REQUIRED) After a successful call to the find_package function the following variables will be set: VALA_FOUND Whether the vala compiler has been found or not VALA_EXECUTABLE Full path to the valac executable if it has been found VALA_VERSION Version number of the available valac Precompiling Vala sources ========================= CMake is mainly supposed to handle c or c++ based projects. Luckily every vala program is translated into plain c code using the vala compiler, followed by normal compilation of the generated c program using gcc. The macro ``vala_precompile`` uses that fact to create c files from your .vala sources for further CMake processing. The first parameter provided is a variable, which will be filled with a list of c files outputted by the vala compiler. This list can than be used in conjunction with functions like ``add_executable`` or others to create the necessary compile rules with CMake. The initial variable is followed by a list of .vala files to be compiled. Please take care to add every vala file belonging to the currently compiled project or library as Vala will otherwise not be able to resolve all dependencies. The following sections may be specified afterwards to provide certain options to the vala compiler: PACKAGES A list of vala packages/libraries to be used during the compile cycle. The package names are exactly the same, as they would be passed to the valac "--pkg=" option. OPTIONS A list of optional options to be passed to the valac executable. This can be used to pass "--thread" for example to enable multi-threading support. DIRECTORY Specify the directory where the output source files will be stored. If ommitted, the source files will be stored in CMAKE_CURRENT_BINARY_DIR. CUSTOM_VAPIS A list of custom vapi files to be included for compilation. This can be useful to include freshly created vala libraries without having to install them in the system. GENERATE_VAPI Pass all the needed flags to the compiler to create an internal vapi for the compiled library. The provided name will be used for this and a .vapi file will be created. GENERATE_HEADER Let the compiler generate a header file for the compiled code. There will be a header file as well as an internal header file being generated called .h and _internal.h The following call is a simple example to the vala_precompile macro showing an example to every of the optional sections:: vala_precompile(VALA_C source1.vala source2.vala source3.vala PACKAGES gtk+-2.0 gio-1.0 posix OPTIONS --thread CUSTOM_VAPIS some_vapi.vapi GENERATE_VAPI myvapi GENERATE_HEADER myheader ) Most important is the variable VALA_C which will contain all the generated c file names after the call. The easiest way to use this information is to tell CMake to create an executable out of it. :: add_executable(myexecutable ${VALA_C}) Further reading =============== The `Pdf Presenter Console`__ , which is a vala based project of mine, makes heavy usage of the here described macros. To look at a real world example of these macros the mentioned project is the right place to take a look. The svn trunk of it can be found at:: svn://pureenergy.cc/pdf_presenter_console/trunk __ http://westhoffswelt.de/projects/pdf_presenter_console.html Acknowledgments =============== Thanks go out to Florian Sowade, a fellow local PHP-Usergroupie, who helped me a lot with the initial version of this macros and always answered my mostly dumb CMake questions. .. _CMake: http://cmake.org .. _Vala: http://live.gnome.org/Vala .. _Genie: http://live.gnome.org/Genie .. Local Variables: mode: rst fill-column: 79 End: vim: et syn=rst tw=79 granite-0.3.0/cmake/FindGObjectIntrospection.cmake000644 001750 001750 00000003765 12340443640 023643 0ustar00shnatselshnatsel000000 000000 # - try to find gobject-introspection # # Once done this will define # # INTROSPECTION_FOUND - system has gobject-introspection # INTROSPECTION_SCANNER - the gobject-introspection scanner, g-ir-scanner # INTROSPECTION_COMPILER - the gobject-introspection compiler, g-ir-compiler # INTROSPECTION_GENERATE - the gobject-introspection generate, g-ir-generate # INTROSPECTION_GIRDIR # INTROSPECTION_TYPELIBDIR # INTROSPECTION_CFLAGS # INTROSPECTION_LIBS # # Copyright (C) 2010, Pino Toscano, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro(_GIR_GET_PKGCONFIG_VAR _outvar _varname) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=${_varname} gobject-introspection-1.0 OUTPUT_VARIABLE _result RESULT_VARIABLE _null ) if (_null) else() string(REGEX REPLACE "[\r\n]" " " _result "${_result}") string(REGEX REPLACE " +$" "" _result "${_result}") separate_arguments(_result) set(${_outvar} ${_result} CACHE INTERNAL "") endif() endmacro(_GIR_GET_PKGCONFIG_VAR) find_package(PkgConfig) if(PKG_CONFIG_FOUND) if(PACKAGE_FIND_VERSION_COUNT GREATER 0) set(_gir_version_cmp ">=${PACKAGE_FIND_VERSION}") endif() pkg_check_modules(_pc_gir gobject-introspection-1.0${_gir_version_cmp}) if(_pc_gir_FOUND) set(INTROSPECTION_FOUND TRUE) _gir_get_pkgconfig_var(INTROSPECTION_SCANNER "g_ir_scanner") _gir_get_pkgconfig_var(INTROSPECTION_COMPILER "g_ir_compiler") _gir_get_pkgconfig_var(INTROSPECTION_GENERATE "g_ir_generate") _gir_get_pkgconfig_var(INTROSPECTION_GIRDIR "girdir") _gir_get_pkgconfig_var(INTROSPECTION_TYPELIBDIR "typelibdir") set(INTROSPECTION_CFLAGS "${_pc_gir_CFLAGS}") set(INTROSPECTION_LIBS "${_pc_gir_LIBS}") endif() endif() mark_as_advanced( INTROSPECTION_SCANNER INTROSPECTION_COMPILER INTROSPECTION_GENERATE INTROSPECTION_GIRDIR INTROSPECTION_TYPELIBDIR INTROSPECTION_CFLAGS INTROSPECTION_LIBS ) granite-0.3.0/cmake/README000644 001750 001750 00000000411 12340443640 016603 0ustar00shnatselshnatsel000000 000000 Elementary CMake modules This is a set of CMake modules: Translations, GSettings, and Vala modules. For all the Vala related modules see README.Vala.rst: - ParseArguments.cmake - ValaPrecompile.cmake - ValaVersion.cmake - FindVala.cmake granite-0.3.0/cmake/ParseArguments.cmake000644 001750 001750 00000002322 12340443640 021670 0ustar00shnatselshnatsel000000 000000 ## # This is a helper Macro to parse optional arguments in Macros/Functions # It has been taken from the public CMake wiki. # See http://www.cmake.org/Wiki/CMakeMacroParseArguments for documentation and # licensing. ## macro(parse_arguments prefix arg_names option_names) set(DEFAULT_ARGS) foreach(arg_name ${arg_names}) set(${prefix}_${arg_name}) endforeach(arg_name) foreach(option ${option_names}) set(${prefix}_${option} FALSE) endforeach(option) set(current_arg_name DEFAULT_ARGS) set(current_arg_list) foreach(arg ${ARGN}) set(larg_names ${arg_names}) list(FIND larg_names "${arg}" is_arg_name) if(is_arg_name GREATER -1) set(${prefix}_${current_arg_name} ${current_arg_list}) set(current_arg_name ${arg}) set(current_arg_list) else(is_arg_name GREATER -1) set(loption_names ${option_names}) list(FIND loption_names "${arg}" is_option) if(is_option GREATER -1) set(${prefix}_${arg} TRUE) else(is_option GREATER -1) set(current_arg_list ${current_arg_list} ${arg}) endif(is_option GREATER -1) endif(is_arg_name GREATER -1) endforeach(arg) set(${prefix}_${current_arg_name} ${current_arg_list}) endmacro(parse_arguments) granite-0.3.0/cmake/COPYING-CMAKE-SCRIPTS000644 001750 001750 00000002457 12340443640 020735 0ustar00shnatselshnatsel000000 000000 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. granite-0.3.0/cmake/ValaPrecompile.cmake000644 001750 001750 00000017630 12340443640 021643 0ustar00shnatselshnatsel000000 000000 ## # Copyright 2009-2010 Jakob Westhoff. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # The views and conclusions contained in the software and documentation are those # of the authors and should not be interpreted as representing official policies, # either expressed or implied, of Jakob Westhoff ## include(ParseArguments) find_package(Vala REQUIRED) ## # Compile vala files to their c equivalents for further processing. # # The "vala_precompile" macro takes care of calling the valac executable on the # given source to produce c files which can then be processed further using # default cmake functions. # # The first parameter provided is a variable, which will be filled with a list # of c files outputted by the vala compiler. This list can than be used in # conjuction with functions like "add_executable" or others to create the # neccessary compile rules with CMake. # # The initial variable is followed by a list of .vala files to be compiled. # Please take care to add every vala file belonging to the currently compiled # project or library as Vala will otherwise not be able to resolve all # dependencies. # # The following sections may be specified afterwards to provide certain options # to the vala compiler: # # PACKAGES # A list of vala packages/libraries to be used during the compile cycle. The # package names are exactly the same, as they would be passed to the valac # "--pkg=" option. # # OPTIONS # A list of optional options to be passed to the valac executable. This can be # used to pass "--thread" for example to enable multi-threading support. # # CUSTOM_VAPIS # A list of custom vapi files to be included for compilation. This can be # useful to include freshly created vala libraries without having to install # them in the system. # # GENERATE_VAPI # Pass all the needed flags to the compiler to create an internal vapi for # the compiled library. The provided name will be used for this and a # .vapi file will be created. # # GENERATE_HEADER # Let the compiler generate a header file for the compiled code. There will # be a header file as well as an internal header file being generated called # .h and _internal.h # # GENERATE_GIR # Have the compiler generate a GObject-Introspection repository file with # name: .gir. This can be later used to create a binary typelib # using the GI compiler. # # GENERATE_SYMBOLS # Output a .symbols file containing all the exported symbols. # # The following call is a simple example to the vala_precompile macro showing # an example to every of the optional sections: # # vala_precompile(VALA_C mytargetname # source1.vala # source2.vala # source3.vala # PACKAGES # gtk+-2.0 # gio-1.0 # posix # DIRECTORY # gen # OPTIONS # --thread # CUSTOM_VAPIS # some_vapi.vapi # GENERATE_VAPI # myvapi # GENERATE_HEADER # myheader # GENERATE_GIR # mygir # GENERATE_SYMBOLS # mysymbols # ) # # Most important is the variable VALA_C which will contain all the generated c # file names after the call. ## macro(vala_precompile output target_name) parse_arguments(ARGS "TARGET;PACKAGES;OPTIONS;DIRECTORY;GENERATE_GIR;GENERATE_SYMBOLS;GENERATE_HEADER;GENERATE_VAPI;CUSTOM_VAPIS" "" ${ARGN}) if(ARGS_DIRECTORY) set(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_DIRECTORY}) else(ARGS_DIRECTORY) set(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) endif(ARGS_DIRECTORY) include_directories(${DIRECTORY}) set(vala_pkg_opts "") foreach(pkg ${ARGS_PACKAGES}) list(APPEND vala_pkg_opts "--pkg=${pkg}") endforeach(pkg ${ARGS_PACKAGES}) set(in_files "") set(out_files "") set(out_files_display "") set(${output} "") foreach(src ${ARGS_DEFAULT_ARGS}) list(APPEND in_files "${CMAKE_CURRENT_SOURCE_DIR}/${src}") string(REPLACE ".vala" ".c" src ${src}) string(REPLACE ".gs" ".c" src ${src}) set(out_file "${DIRECTORY}/${src}") list(APPEND out_files "${DIRECTORY}/${src}") list(APPEND out_files_display "${src}") list(APPEND ${output} ${out_file}) endforeach(src ${ARGS_DEFAULT_ARGS}) set(custom_vapi_arguments "") if(ARGS_CUSTOM_VAPIS) foreach(vapi ${ARGS_CUSTOM_VAPIS}) list(APPEND custom_vapi_arguments ${vapi}) endforeach(vapi ${ARGS_CUSTOM_VAPIS}) endif(ARGS_CUSTOM_VAPIS) set(vapi_arguments "") if(ARGS_GENERATE_VAPI) list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_VAPI}.vapi") list(APPEND out_files_display "${ARGS_GENERATE_VAPI}.vapi") set(vapi_arguments "--library=${ARGS_GENERATE_VAPI}" "--vapi=${ARGS_GENERATE_VAPI}.vapi") endif(ARGS_GENERATE_VAPI) set(header_arguments "") if(ARGS_GENERATE_HEADER) list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_HEADER}.h") list(APPEND out_files_display "${ARGS_GENERATE_HEADER}.h") list(APPEND header_arguments "--header=${ARGS_GENERATE_HEADER}.h") endif(ARGS_GENERATE_HEADER) set(gir_arguments "") if(ARGS_GENERATE_GIR) list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_GIR}.gir") list(APPEND out_files_display "${ARGS_GENERATE_GIR}.gir") set(gir_arguments "--gir=${ARGS_GENERATE_GIR}.gir") endif(ARGS_GENERATE_GIR) set(symbols_arguments "") if(ARGS_GENERATE_SYMBOLS) list(APPEND out_files "${DIRECTORY}/${ARGS_GENERATE_SYMBOLS}.symbols") list(APPEND out_files_display "${ARGS_GENERATE_SYMBOLS}.symbols") set(symbols_arguments "--symbols=${ARGS_GENERATE_SYMBOLS}.symbols") endif(ARGS_GENERATE_SYMBOLS) # Workaround for a bug that would make valac run twice. This file is written # after the vala compiler generates C source code. set(OUTPUT_STAMP ${CMAKE_CURRENT_BINARY_DIR}/${target_name}_valac.stamp) add_custom_command( OUTPUT ${OUTPUT_STAMP} COMMAND ${VALA_EXECUTABLE} ARGS "-C" ${header_arguments} ${vapi_arguments} ${gir_arguments} ${symbols_arguments} "-b" ${CMAKE_CURRENT_SOURCE_DIR} "-d" ${DIRECTORY} ${vala_pkg_opts} ${ARGS_OPTIONS} ${in_files} ${custom_vapi_arguments} COMMAND touch ARGS ${OUTPUT_STAMP} DEPENDS ${in_files} ${ARGS_CUSTOM_VAPIS} COMMENT "Generating ${out_files_display}" ) # This command will be run twice for some reason (pass a non-empty string to COMMENT # in order to see it). Since valac is not executed from here, this won't be a problem. add_custom_command(OUTPUT ${out_files} DEPENDS ${OUTPUT_STAMP} COMMENT "") endmacro(vala_precompile) granite-0.3.0/cmake/ValaVersion.cmake000644 001750 001750 00000007102 12340443640 021162 0ustar00shnatselshnatsel000000 000000 ## # Copyright 2009-2010 Jakob Westhoff. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY JAKOB WESTHOFF ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL JAKOB WESTHOFF OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # The views and conclusions contained in the software and documentation are those # of the authors and should not be interpreted as representing official policies, # either expressed or implied, of Jakob Westhoff ## include(ParseArguments) find_package(Vala REQUIRED) ## # Ensure a certain valac version is available # # The initial argument is the version to check for # # It may be followed by a optional parameter to specifiy a version range. The # following options are valid: # # EXACT # Vala needs to be available in the exact version given # # MINIMUM # The provided version is the minimum version. Therefore Vala needs to be # available in the given version or any higher version # # MAXIMUM # The provided version is the maximum. Therefore Vala needs to be available # in the given version or any version older than this # # If no option is specified the version will be treated as a minimal version. ## macro(ensure_vala_version version) parse_arguments(ARGS "" "MINIMUM;MAXIMUM;EXACT" ${ARGN}) set(compare_message "") set(error_message "") if(ARGS_MINIMUM) set(compare_message "a minimum ") set(error_message "or greater ") elseif(ARGS_MAXIMUM) set(compare_message "a maximum ") set(error_message "or less ") endif(ARGS_MINIMUM) message(STATUS "checking for ${compare_message}Vala version of ${version}" ) unset(version_accepted) # MINIMUM is the default if no option is specified if(ARGS_EXACT) if(${VALA_VERSION} VERSION_EQUAL ${version} ) set(version_accepted TRUE) endif(${VALA_VERSION} VERSION_EQUAL ${version}) elseif(ARGS_MAXIMUM) if(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version}) set(version_accepted TRUE) endif(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version}) else(ARGS_MAXIMUM) if(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version}) set(version_accepted TRUE) endif(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version}) endif(ARGS_EXACT) if (NOT version_accepted) message(FATAL_ERROR "Vala version ${version} ${error_message}is required." ) endif(NOT version_accepted) message(STATUS " found Vala, version ${VALA_VERSION}" ) endmacro(ensure_vala_version) granite-0.3.0/cmake/Makefile000644 001750 001750 00000020613 12340443640 017371 0ustar00shnatselshnatsel000000 000000 # CMAKE generated file: DO NOT EDIT! # Generated by "Unix Makefiles" Generator, CMake Version 2.8 # Default target executed when no arguments are given to make. default_target: all .PHONY : default_target #============================================================================= # Special targets provided by cmake. # Disable implicit rules so canoncical targets will work. .SUFFIXES: # Remove some rules from gmake that .SUFFIXES does not remove. SUFFIXES = .SUFFIXES: .hpux_make_needs_suffix_list # Suppress display of executed commands. $(VERBOSE).SILENT: # A target that is always out of date. cmake_force: .PHONY : cmake_force #============================================================================= # Set environment variables for the build. # The shell in which to execute make rules. SHELL = /bin/sh # The CMake executable. CMAKE_COMMAND = /usr/bin/cmake # The command to remove a file. RM = /usr/bin/cmake -E remove -f # The top-level source directory on which CMake was run. CMAKE_SOURCE_DIR = /home/mefrio/Scrivania/cmake # The top-level build directory on which CMake was run. CMAKE_BINARY_DIR = /home/mefrio/Scrivania/cmake/cmake #============================================================================= # Targets provided globally by CMake. # Special rule for the target edit_cache edit_cache: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running interactive CMake command-line interface..." /usr/bin/cmake -i . .PHONY : edit_cache # Special rule for the target edit_cache edit_cache/fast: edit_cache .PHONY : edit_cache/fast # Special rule for the target install install: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." /usr/bin/cmake -P cmake_install.cmake .PHONY : install # Special rule for the target install install/fast: preinstall/fast @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." /usr/bin/cmake -P cmake_install.cmake .PHONY : install/fast # Special rule for the target install/local install/local: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake .PHONY : install/local # Special rule for the target install/local install/local/fast: install/local .PHONY : install/local/fast # Special rule for the target install/strip install/strip: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake .PHONY : install/strip # Special rule for the target install/strip install/strip/fast: install/strip .PHONY : install/strip/fast # Special rule for the target list_install_components list_install_components: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" .PHONY : list_install_components # Special rule for the target list_install_components list_install_components/fast: list_install_components .PHONY : list_install_components/fast # Special rule for the target rebuild_cache rebuild_cache: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) .PHONY : rebuild_cache # Special rule for the target rebuild_cache rebuild_cache/fast: rebuild_cache .PHONY : rebuild_cache/fast # The main all target all: cmake_check_build_system $(CMAKE_COMMAND) -E cmake_progress_start /home/mefrio/Scrivania/cmake/cmake/CMakeFiles /home/mefrio/Scrivania/cmake/cmake/CMakeFiles/progress.marks $(MAKE) -f CMakeFiles/Makefile2 all $(CMAKE_COMMAND) -E cmake_progress_start /home/mefrio/Scrivania/cmake/cmake/CMakeFiles 0 .PHONY : all # The main clean target clean: $(MAKE) -f CMakeFiles/Makefile2 clean .PHONY : clean # The main clean target clean/fast: clean .PHONY : clean/fast # Prepare targets for installation. preinstall: all $(MAKE) -f CMakeFiles/Makefile2 preinstall .PHONY : preinstall # Prepare targets for installation. preinstall/fast: $(MAKE) -f CMakeFiles/Makefile2 preinstall .PHONY : preinstall/fast # clear depends depend: $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 .PHONY : depend #============================================================================= # Target rules for targets named scratch # Build rule for target. scratch: cmake_check_build_system $(MAKE) -f CMakeFiles/Makefile2 scratch .PHONY : scratch # fast build rule for target. scratch/fast: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/build .PHONY : scratch/fast src/entry.o: src/entry.c.o .PHONY : src/entry.o # target to build an object file src/entry.c.o: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.o .PHONY : src/entry.c.o src/entry.i: src/entry.c.i .PHONY : src/entry.i # target to preprocess a source file src/entry.c.i: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.i .PHONY : src/entry.c.i src/entry.s: src/entry.c.s .PHONY : src/entry.s # target to generate assembly for a file src/entry.c.s: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/entry.c.s .PHONY : src/entry.c.s src/main_window.o: src/main_window.c.o .PHONY : src/main_window.o # target to build an object file src/main_window.c.o: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.o .PHONY : src/main_window.c.o src/main_window.i: src/main_window.c.i .PHONY : src/main_window.i # target to preprocess a source file src/main_window.c.i: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.i .PHONY : src/main_window.c.i src/main_window.s: src/main_window.c.s .PHONY : src/main_window.s # target to generate assembly for a file src/main_window.c.s: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/main_window.c.s .PHONY : src/main_window.c.s src/menu.o: src/menu.c.o .PHONY : src/menu.o # target to build an object file src/menu.c.o: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.o .PHONY : src/menu.c.o src/menu.i: src/menu.c.i .PHONY : src/menu.i # target to preprocess a source file src/menu.c.i: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.i .PHONY : src/menu.c.i src/menu.s: src/menu.c.s .PHONY : src/menu.s # target to generate assembly for a file src/menu.c.s: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/menu.c.s .PHONY : src/menu.c.s src/notebook.o: src/notebook.c.o .PHONY : src/notebook.o # target to build an object file src/notebook.c.o: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.o .PHONY : src/notebook.c.o src/notebook.i: src/notebook.c.i .PHONY : src/notebook.i # target to preprocess a source file src/notebook.c.i: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.i .PHONY : src/notebook.c.i src/notebook.s: src/notebook.c.s .PHONY : src/notebook.s # target to generate assembly for a file src/notebook.c.s: $(MAKE) -f CMakeFiles/scratch.dir/build.make CMakeFiles/scratch.dir/src/notebook.c.s .PHONY : src/notebook.c.s # Help Target help: @echo "The following are some of the valid targets for this Makefile:" @echo "... all (the default if no target is provided)" @echo "... clean" @echo "... depend" @echo "... edit_cache" @echo "... install" @echo "... install/local" @echo "... install/strip" @echo "... list_install_components" @echo "... rebuild_cache" @echo "... scratch" @echo "... src/entry.o" @echo "... src/entry.i" @echo "... src/entry.s" @echo "... src/main_window.o" @echo "... src/main_window.i" @echo "... src/main_window.s" @echo "... src/menu.o" @echo "... src/menu.i" @echo "... src/menu.s" @echo "... src/notebook.o" @echo "... src/notebook.i" @echo "... src/notebook.s" .PHONY : help #============================================================================= # Special targets to cleanup operation of make. # Special rule to run CMake to check the build system integrity. # No rule that depends on this can have commands that come from listfiles # because they might be regenerated. cmake_check_build_system: $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 .PHONY : cmake_check_build_system granite-0.3.0/cmake/GObjectIntrospectionMacros.cmake000644 001750 001750 00000002120 12340443640 024167 0ustar00shnatselshnatsel000000 000000 macro(add_target_gir TARGET_NAME GIR_NAME HEADER C_FILES CFLAGS PKG_VERSION) set(PACKAGES "") foreach(PKG ${ARGN}) set(PACKAGES ${PACKAGES} --include=${PKG}) endforeach() set(ENV{LD_LIBRARY_PATH} \"${CMAKE_CURRENT_BINARY_DIR}:\$ENV{LD_LIBRARY_PATH}\") set(PKG_GIR_NAME ${GIR_NAME}-${PKG_VERSION}) add_custom_command(TARGET ${TARGET_NAME} COMMAND ${INTROSPECTION_SCANNER} ${CFLAGS} -n ${GIR_NAME} --library ${PKG_NAME} ${PACKAGES} --warn-all -o ${CMAKE_CURRENT_BINARY_DIR}/${PKG_GIR_NAME}.gir -L${CMAKE_CURRENT_BINARY_DIR} --nsversion=${PKG_VERSION} ${CMAKE_CURRENT_BINARY_DIR}/${HEADER} ${C_FILES}) add_custom_command(TARGET ${TARGET_NAME} COMMAND ${INTROSPECTION_COMPILER} ${CMAKE_CURRENT_BINARY_DIR}/${PKG_GIR_NAME}.gir -o ${CMAKE_CURRENT_BINARY_DIR}/${PKG_GIR_NAME}.typelib) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PKG_GIR_NAME}.gir DESTINATION ${INTROSPECTION_GIRDIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PKG_GIR_NAME}.typelib DESTINATION ${INTROSPECTION_TYPELIBDIR}) endmacro() granite-0.3.0/COPYING000644 001750 001750 00000016743 12340443640 015715 0ustar00shnatselshnatsel000000 000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. granite-0.3.0/lib/granite.deps000644 001750 001750 00000000035 12340443640 017721 0ustar00shnatselshnatsel000000 000000 gtk+-3.0 gio-unix-2.0 gee-0.8granite-0.3.0/lib/CMakeLists.txt000644 001750 001750 00000006727 12340443640 020171 0ustar00shnatselshnatsel000000 000000 # increase when you break the API set (PKG_SOVERSION 2) # Increase when you add functionality set (PKG_SOMINOR 0.1) set (VALA_SOURCES style-classes.vala Application.vala Drawing/Color.vala Drawing/BufferSurface.vala Drawing/Utilities.vala GtkPatch/AboutDialog.vala Services/Settings.vala Services/Logger.vala Services/Paths.vala Services/System.vala Services/Contractor.vala Services/ContractorProxy.vala Services/IconFactory.vala Services/SimpleCommand.vala Widgets/Utils.vala Widgets/WrapLabel.vala Widgets/AboutDialog.vala Widgets/ModeButton.vala Widgets/DatePicker.vala Widgets/Entries.vala Widgets/TimePicker.vala Widgets/CollapsiblePaned.vala Widgets/StaticNotebook.vala Widgets/DynamicNotebook.vala Widgets/CompositedWindow.vala Widgets/AppMenu.vala Widgets/Welcome.vala Widgets/ToolButtonWithMenu.vala Widgets/PopOver.vala Widgets/ContractorView.vala Widgets/ContractorMenu.vala Widgets/DecoratedWindow.vala Widgets/LightWindow.vala Widgets/StatusBar.vala Widgets/SidebarPaned.vala Widgets/SourceList.vala Widgets/CellRendererExpander.vala Widgets/CellRendererBadge.vala Widgets/ThinPaned.vala Widgets/OverlayBar.vala ) set (C_SOURCES Widgets/widgets-utils.c Widgets/close-button.c ) ###################### # lib PC file ###################### set (PREFIX ${CMAKE_INSTALL_PREFIX}) set (DOLLAR "$") # You hear that? It's kittens being killed by the gods of cmake configure_file (${CMAKE_SOURCE_DIR}/lib/config.h.cmake ${CMAKE_BINARY_DIR}/lib/config.h) # used from config.vala configure_file (${CMAKE_CURRENT_SOURCE_DIR}/${PKG_NAME}.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/${PKG_NAME}.pc) include (GNUInstallDirs) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${PKG_NAME}.pc DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig) # Link all set (CFLAGS ${DEPS_CFLAGS} ${DEPS_CFLAGS_OTHER}) add_definitions (${CFLAGS} "-DGETTEXT_PACKAGE=\"${GETTEXT_PACKAGE}\"") set (LIBS ${DEPS_LIBRARIES} -lm) set (LIB_PATHS ${DEPS_LIBRARY_DIRS}) link_directories (${LIB_PATHS}) include_directories (${CMAKE_CURRENT_SOURCE_DIR}/Widgets) vala_precompile (VALA_C ${PKG_NAME} ${VALA_SOURCES} PACKAGES ${PKG_DEPS} GENERATE_HEADER ${PKG_NAME} GENERATE_VAPI ${PKG_NAME} CUSTOM_VAPIS ${CMAKE_CURRENT_SOURCE_DIR}/config.vapi OPTIONS ${VALAC_OPTIONS} ) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${PKG_NAME}.vapi DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/vala/vapi) install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PKG_NAME}.deps DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/vala/vapi) install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${PKG_NAME}.h DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/${PKG_NAME}) install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/Widgets/widgets-utils.h DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/${PKG_NAME}) set (LIB_FILES ${C_SOURCES} ${VALA_C}) add_library (${PKG_NAME} SHARED ${LIB_FILES}) target_link_libraries (${PKG_NAME} ${LIBS}) set_target_properties (${PKG_NAME} PROPERTIES VERSION ${PKG_SOVERSION}.${PKG_SOMINOR} SOVERSION ${PKG_SOVERSION}) install (TARGETS ${PKG_NAME} DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) ########################### # GObject Introspection ########################### include (FindGObjectIntrospection) if (INTROSPECTION_FOUND) include (GObjectIntrospectionMacros) add_target_gir (${PKG_NAME} ${PKG_GIR_NAME} ${PKG_NAME}.h "${VALA_C}" "${DEPS_CFLAGS}" ${API_VERSION} ${GI_PKG_DEPS}) endif ()granite-0.3.0/lib/config.vapi000644 001750 001750 00000000320 12340443640 017536 0ustar00shnatselshnatsel000000 000000 [CCode (cname = "GETTEXT_PACKAGE", cheader_filename = "config.h")] internal const string GETTEXT_PACKAGE; [CCode (cname = "RESOURCES_DIR", cheader_filename = "config.h")] internal const string RESOURCES_DIR; granite-0.3.0/lib/GtkPatch/AboutDialog.vala000755 001750 001750 00000040424 12340443640 022170 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Adrien Plazas This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Gtk; using Gdk; public class Granite.GtkPatch.AboutDialog : Gtk.Dialog { /** * The people who contributed artwork to the program, as a null-terminated array of strings. */ public string[] artists { set { _artists = value; if (_artists == null || _artists.length == 0) { artists_label.hide(); artists_label.set_text(""); } else { artists_label.set_markup(set_string_from_string_array("" + _("Designed by:") + "\n", _artists)); artists_label.show(); } } get { return _artists; } } string[] _artists = new string[0]; /** * The authors of the program, as a null-terminated array of strings. */ public string[] authors { set { _authors = value; if (_authors == null || _authors.length == 0) { authors_label.hide(); authors_label.set_text(""); } else { authors_label.set_markup(set_string_from_string_array("" + _("Written by:") + "\n", _authors)); authors_label.show(); } } get { return _authors; } } string[] _authors = new string[0]; /** * Comments about the program. */ public string comments { set { _comments = value; if (_comments == null || _comments == "") { comments_label.hide(); comments_label.set_text(""); } else { comments_label.set_text(_comments + "\n"); comments_label.show(); } } get { return _comments; } } string _comments = ""; /** * Copyright information for the program. */ public string copyright { set { _copyright = value; if (_copyright == null || _copyright == "") { copyright_label.hide(); copyright_label.set_text(""); } else { copyright_label.set_markup ("" + _("Copyright © %s").printf (_copyright.replace("&", "&")) + "\n"); copyright_label.show(); } } get { return _copyright; } } string _copyright = ""; /** * The people documenting the program, as a null-terminated array of strings. */ public string[] documenters { set { _documenters = value; if (documenters.length == 0 || documenters == null) documenters_label.hide(); else { documenters_label.show(); documenters_label.set_markup(set_string_from_string_array(""+_("Documented by:")+"\n", documenters)); } } get { return _documenters; } } string[] _documenters = new string[0]; /** * The license of the program. */ public string license { set { _license = value; update_license(); } get { return _license; } } string _license = ""; public License license_type { set { _license_type = value; update_license(); } get { return _license_type; } } License _license_type = License.UNKNOWN; /** * A logo for the about box. */ public Pixbuf logo { set { _logo = value; update_logo_image(); } get { return _logo; } } Pixbuf _logo = null; /** * A named icon to use as the logo for the about box. */ public string logo_icon_name { set { _logo_icon_name = value; update_logo_image(); } get { return _logo_icon_name; } } string _logo_icon_name = ""; /** * The name of the program. */ public string program_name { set { _program_name = value; set_name_and_version(); } get { return _program_name; } } string _program_name = ""; /** * Credits to the translators. */ public string translator_credits { set { _translator_credits = value; if (_translator_credits == null || _translator_credits == "") { translators_label.hide(); translators_label.set_text(""); } else { translators_label.set_markup("" + _("Translated by %s").printf(_translator_credits.replace("&", "&")) + ""); translators_label.show(); } } get { return _translator_credits; } } string _translator_credits = ""; /** * The version of the program. */ public string version { set { _version = value; set_name_and_version(); } get { return _version; } } string _version = ""; /** * The URL for the link to the website of the program. */ public string website { set { _website = value; update_website(); } get { return _website; } } string _website = ""; /** * The label for the link to the website of the program. */ public string website_label { set { _website_label = value; update_website(); } get { return _website_label; } } string _website_label = ""; // Signals public virtual signal bool activate_link (string uri) { // Improve error management FIXME bool result = false; if (uri != null) { try { result = Gtk.show_uri(get_screen(), uri, Gtk.get_current_event_time()); } catch (Error err) { stderr.printf ("Unable to open the URI: %s", err.message); } } return result; } // UI elements private Image logo_image; private Label name_label; private Label copyright_label; private Label comments_label; private Label authors_label; private Label artists_label; private Label documenters_label; private Label translators_label; private Label license_label; private Label website_url_label; private Button close_button; private const string STYLESHEET = """ * { -GtkDialog-action-area-border: 12px; -GtkDialog-button-spacing: 10px; -GtkDialog-content-area-border: 0; } """; /** * Creates a new Granite.AboutDialog */ public AboutDialog() { title = ""; has_resize_grip = false; resizable = false; deletable = false; // Hide the window's close button when possible set_default_response(ResponseType.CANCEL); Granite.Widgets.Utils.set_theming (this, STYLESHEET, null, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); // Set the default containers Box content_area = (Box)get_content_area(); Box action_area = (Box)get_action_area(); var content_hbox = new Box(Orientation.HORIZONTAL, 12); var content_right_box = new Box(Orientation.VERTICAL, 0); var content_scrolled = new ScrolledWindow(null, new Adjustment(0, 0, 100, 1, 10, 0)); var content_scrolled_vbox = new Box(Orientation.VERTICAL, 0); var title_vbox = new Box(Orientation.VERTICAL, 0); var logo_vbox = new Box(Orientation.VERTICAL, 0); content_scrolled.shadow_type = ShadowType.NONE; content_scrolled.hscrollbar_policy = PolicyType.NEVER; content_scrolled.vscrollbar_policy = PolicyType.AUTOMATIC; content_area.pack_start(content_hbox, true, true, 0); logo_image = new Image(); logo_vbox.pack_start(logo_image, false, false, 12); logo_vbox.pack_end(new Box(Orientation.VERTICAL, 0), true, true, 0); // Adjust sizes content_hbox.height_request = 160; content_scrolled_vbox.width_request = 288; logo_image.set_size_request(128, 128); name_label = new Label(""); name_label.halign = Gtk.Align.START; name_label.set_line_wrap(true); name_label.set_selectable(true); Granite.Widgets.Utils.apply_text_style_to_label (TextStyle.H2, name_label); copyright_label = new Label(""); copyright_label.set_selectable(true); copyright_label.halign = Gtk.Align.START; copyright_label.set_line_wrap(true); comments_label = new Label(""); comments_label.set_selectable(true); comments_label.halign = Gtk.Align.START; comments_label.set_line_wrap(true); authors_label = new Label(""); authors_label.set_selectable(true); authors_label.halign = Gtk.Align.START; authors_label.set_line_wrap(true); artists_label = new Label(""); artists_label.set_selectable(true); artists_label.halign = Gtk.Align.START; artists_label.set_line_wrap(true); documenters_label = new Label(""); documenters_label.set_selectable(true); documenters_label.halign = Gtk.Align.START; documenters_label.set_line_wrap(true); translators_label = new Label(""); translators_label.set_selectable(true); translators_label.halign = Gtk.Align.START; translators_label.set_line_wrap(true); license_label = new Widgets.WrapLabel(""); license_label.set_selectable(true); website_url_label = new Label (""); website_url_label.set_selectable (true); website_url_label.halign = Gtk.Align.START; website_url_label.set_line_wrap (true); // left and right padding content_hbox.pack_start(new Box(Orientation.VERTICAL, 0), false, false, 0); content_hbox.pack_end(new Box(Orientation.VERTICAL, 0), false, false, 0); content_hbox.pack_start(logo_vbox); content_hbox.pack_start(content_right_box); content_scrolled.add_with_viewport(content_scrolled_vbox); title_vbox.pack_start(name_label, false, false, 12); //FIXME content_right_box.pack_start(title_vbox, false, false, 0); content_right_box.pack_start(content_scrolled, true, true, 0); // Extra padding between the scrolled window and the action area content_right_box.pack_end(new Box(Orientation.VERTICAL, 0), false, false, 6); content_scrolled_vbox.pack_start(comments_label); content_scrolled_vbox.pack_start(website_url_label); content_scrolled_vbox.pack_start(copyright_label); content_scrolled_vbox.pack_start(license_label); content_scrolled_vbox.pack_start(authors_label); content_scrolled_vbox.pack_start(artists_label); content_scrolled_vbox.pack_start(documenters_label); content_scrolled_vbox.pack_start(translators_label); close_button = new Button.with_label(_("Close")); close_button.clicked.connect(() => { response(ResponseType.CANCEL); }); action_area.pack_end (close_button, false, false, 0); close_button.grab_focus(); } private string set_string_from_string_array(string title, string[] peoples,bool tooltip=false) { if (tooltip) return string.joinv ("\n",peoples); string text = ""; string name = ""; string email = "" ; string _person_data; bool email_started= false; text += title + ""; for (int i= 0;i%s\n".printf (email,email,name.strip ()); email = ""; name =""; email_started=false; } text += ""; return text; } private void update_logo_image() { try { logo_image.set_from_pixbuf(IconTheme.get_default ().load_icon ("application-default-icon", 128, 0)); } catch (Error err) { stderr.printf ("Unable to load terminal icon: %s", err.message); } if (logo_icon_name != null && logo_icon_name != "") { try { logo_image.set_from_pixbuf(IconTheme.get_default ().load_icon (logo_icon_name, 128, 0)); } catch (Error err) { stderr.printf ("Unable to load terminal icon: %s", err.message); } } else if (logo != null) logo_image.set_from_pixbuf(logo); } private void update_license() { switch (license_type) { case License.GPL_2_0: set_generic_license("http://www.gnu.org/licenses/old-licenses/gpl-2.0.html", "gpl-2.0"); break; case License.GPL_3_0: set_generic_license("http://www.gnu.org/licenses/gpl.html", "gpl"); break; case License.LGPL_2_1: set_generic_license("http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html", "lgpl-2.1"); break; case License.LGPL_3_0: set_generic_license("http://www.gnu.org/licenses/lgpl.html", "lgpl"); break; case License.BSD: set_generic_license("http://opensource.org/licenses/bsd-license.php", "bsd"); break; case License.MIT_X11: set_generic_license("http://opensource.org/licenses/mit-license.php", "mit"); break; case License.ARTISTIC: set_generic_license("http://opensource.org/licenses/artistic-license-2.0.php", "artistic"); break; default: if (license != null && license != "") { license_label.set_markup(license + "\n"); license_label.show(); } else license_label.hide(); break; } } private void set_generic_license(string url, string license_type) { license_label.set_markup("" + _("This program is published under the terms of the ") + license_type + _(" license, it comes with ABSOLUTELY NO WARRANTY; for details, visit ") + "" + url + "\n"); license_label.show(); } private void set_name_and_version() { if (program_name != null && program_name != "") { name_label.set_text(program_name); if (version != null && version != "") name_label.set_text(name_label.get_text() + " " + version); name_label.show(); } else name_label.hide(); } private void update_website () { if (website != null && website != "") { if (website_label != null && website_label != "") website_url_label.set_markup ("%s\n".printf (website, website, website_label.replace("&", "&"))); else website_url_label.set_markup ("%s\n".printf (website, website, website)); website_url_label.show (); } else website_url_label.hide (); } } granite-0.3.0/lib/Application.vala000644 001750 001750 00000025055 12340443640 020534 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Maxwell Barvian This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Gtk; using Granite.Services; using Granite.Widgets; namespace Granite { /** * Global deprecated object.. */ [Deprecated (since = "granite-0.1")] public static Granite.Application app; /** * This is the base class for all Granite-based apps. It has methods that help * to create a great deal of an app's functionality. */ public abstract class Application : Gtk.Application { public string build_data_dir; public string build_pkg_data_dir; public string build_release_name; public string build_version; public string build_version_info; /** * The user facing name of the application. This name is used * throughout the application and should be capitalized correctly. */ public string program_name; /** * The compiled binary name, which must match the CMake exec name. * This is used to launch the application from a launcher or the * command line. */ public string exec_name; /** * Years that the copyright extends to. Usually from the start * of the project to the most recent modification to it. */ public string app_copyright; public string app_years; /** * Icon to be associated with the application. * * This is either the name of an icon shipped by the icon theme, * or the name of an icon shipped with the app (for custom icons). * The name should not include the full path or file extension. * WRONG: /usr/share/icons/myicon.png RIGHT: myicon */ public string app_icon; /** * The launcher to be associated with this application. * * This should be the name of a file in /usr/share/applications/. * See [[http://standards.freedesktop.org/desktop-entry-spec/latest/]] * for more information. */ public string app_launcher; /** * Main website or homepage for the application. * * If the application has no homepage, one should be created on * launchpad.net. */ public string main_url; /** * A link to the software's public bug tracker. * * If the application does not have a bug tracker, one should be * created on launchpad.net. */ public string bug_url; /** * Link to question and answer site or support forum for the app. * * Launchpad offers a QA service if one is needed. */ public string help_url; /** * Link to where users can translate the application. * * Launchad offers a translation service if one is necessary. */ public string translate_url; /** * Full names of the application authors for the about dialog. */ public string[] about_authors = {}; /** * Full names of documenters of the app for the about dialog. */ public string[] about_documenters = {}; /** * Names of the designers of the application's user interface. */ public string[] about_artists = {}; public string about_comments; /** * Names of the translators of the application. */ public string about_translators; /** * The copyright license that the work is distributed under. */ public string about_license; public License about_license_type; /** * This creates a new Application class */ public Application () { #if LINUX prctl (15, exec_name, 0, 0, 0); #endif Environment.set_prgname (exec_name); Logger.initialize (program_name); Logger.DisplayLevel = LogLevel.INFO; message ("%s version: %s", program_name, build_version); var un = Posix.utsname (); message ("Kernel version: %s", (string) un.release); Logger.DisplayLevel = LogLevel.WARN; Intl.bindtextdomain (exec_name, build_data_dir + "/locale"); add_actions (); // Deprecated Granite.app = this; } #if LINUX [CCode (cheader_filename = "sys/prctl.h", cname = "prctl")] protected extern static int prctl (int option, string arg2, ulong arg3, ulong arg4, ulong arg5); #endif /** * This method runs the application * * @param args array of arguments */ public new int run (string[] args) { // parse commandline options var context = new OptionContext (""); context.add_main_entries (options, null); context.add_group (Gtk.get_option_group (false)); try { context.parse (ref args); } catch { } set_options (); if (ABOUT) { Gtk.init (ref args); handle_about_parameter (); return Posix.EXIT_SUCCESS; } return base.run (args); } protected static bool DEBUG = false; protected static bool ABOUT = false; protected const OptionEntry[] options = { { "debug", 'd', 0, OptionArg.NONE, out DEBUG, "Enable debug logging", null }, { "about", 'a', 0, OptionArg.NONE, out ABOUT, "Show About dialog", null }, { null } }; protected virtual void set_options () { if (DEBUG) Logger.DisplayLevel = LogLevel.DEBUG; } /** * This methods creates a new App Menu * * @param menu the menu to create the App Menu for * * @return app_menu */ public AppMenu create_appmenu (Gtk.Menu menu) { AppMenu app_menu = new AppMenu.with_app (this, menu); app_menu.show_about.connect (show_about); return app_menu; } protected Granite.Widgets.AboutDialog about_dlg; /** * This method shows the about dialog of this app. * * @param parent This widget is the window that is calling the about page being created. */ public virtual void show_about (Gtk.Widget parent) { assert (parent is Gtk.Window); var developers_string = _("Developers"); Granite.Widgets.show_about_dialog ((Gtk.Window) parent, "program_name", program_name, "version", build_version, "logo_icon_name", app_icon, "comments", about_comments, "copyright", "%s %s %s".printf (app_years, program_name, developers_string), "website", main_url, "website_label", _("Website"), "authors", about_authors, "documenters", about_documenters, "artists", about_artists, "translator_credits", about_translators, "license", about_license, "license_type", about_license_type, "help", help_url, "translate", translate_url, "bug", bug_url); } /* Allows reusing the About dialog */ private Gtk.Window about_dialog_parent = null; private void add_actions () { /* Actions are always executed in the primary instance, provided that the application was registered. Take advantage of this by showing the About dialog using the main instance, saving memory. */ var show_about_action = new SimpleAction ("show-about-dialog", null); show_about_action.activate.connect (() => { hold (); debug ("The show-about-dialog action was activated"); if (this.about_dialog_parent == null) this.about_dialog_parent = new Gtk.Window (); show_about (this.about_dialog_parent); release (); }); add_action (show_about_action); } private void handle_about_parameter () { try { register (); } catch (Error error) { warning ("Couldn't register application: %s", error.message); } activate_action ("show-about-dialog", null); if (!this.is_remote) { /* This means that the primary instance was created by running "app --about". Manually set up exit conditions and run the main loop of the application. This is needed to prevent weird stuff from happening if the actual application is opened while this is running. */ Gtk.Widget about_dialog = this.about_dialog_parent.get_data ("gtk-about-dialog"); about_dialog.hide.connect (() => { if (get_windows () == null) Gtk.main_quit (); }); window_removed.connect (() => { if (get_windows () == null) Gtk.main_quit (); }); Gtk.main (); } } } } granite-0.3.0/lib/config.h.cmake000644 001750 001750 00000000225 12340443640 020111 0ustar00shnatselshnatsel000000 000000 #ifndef H_CONFIG #define H_CONFIG #cmakedefine GRANITE_NLS_LOCALEDIR "@GRANITE_NLS_LOCALEDIR@" #cmakedefine RESOURCES_DIR "@RESOURCES_DIR@" #endif granite-0.3.0/lib/Drawing/Color.vala000644 001750 001750 00000034032 12340443640 020735 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Robert Dyer This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Gdk; using Granite.Services; namespace Granite.Drawing { /** * A class containing an RGBA color and methods for more powerful color manipulation. */ public class Color : GLib.Object, SettingsSerializable { /** * The value of the red channel, with 0 being the lowest value and 1.0 being the greatest value. */ public double R; /** * The value of the green channel, with 0 being the lowest value and 1.0 being the greatest value. */ public double G; /** * The value of the blue channel, with 0 being the lowest value and 1.0 being the greatest value. */ public double B; /** * The value of the alpha channel, with 0 being the lowest value and 1.0 being the greatest value. */ public double A; /** * Constructs a new {@link Granite.Drawing.Color} with the supplied values. * * @param R the value of the red channel as a double * @param G the value of the green channel as a double * @param B the value of the blue channel as a double * @param A the value of the alpha channel as a double */ public Color (double R, double G, double B, double A) { this.R = R; this.G = G; this.B = B; this.A = A; } /** * Constructs a new {@link Granite.Drawing.Color} from a {@link Gdk.Color}. * * @param color the {@link Gdk.Color} */ public Color.from_gdk (Gdk.Color color) { R = color.red / (double) uint16.MAX; G = color.green / (double) uint16.MAX; B = color.blue / (double) uint16.MAX; A = 1.0; } /** * Changes the hue of this color to the supplied one. * * @param hue the hue to change this color to * * @return the new {@link Granite.Drawing.Color} */ public Color set_hue (double hue) requires (hue >= 0 && hue <= 360) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); h = hue; hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Changes the saturation of this color to the supplied one. * * @param sat the saturation to change this color to * * @return the new {@link Granite.Drawing.Color} */ public Color set_sat (double sat) requires (sat >= 0 && sat <= 1) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); s = sat; hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Changes the value of this color to the supplied one. * * @param val the value to change this color to * * @return the new {@link Granite.Drawing.Color} */ public Color set_val (double val) requires (val >= 0 && val <= 1) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); v = val; hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Changes the value of the alpha channel. * * @param alpha the value of the alpha channel * * @return the new {@link Granite.Drawing.Color} */ public Color set_alpha (double alpha) requires (alpha >= 0 && alpha <= 1) { A = alpha; return this; } /** * Get the value. * @return the hue of this color, as a double value */ public double get_hue () { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); return h; } /** * Get the value. * @return the saturation of this color, as a double value */ public double get_sat () { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); return s; } /** * Get the value. * * @return the value of this color, as a double value */ public double get_val () { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); return v; } /** * Adds the supplied hue value to this color's hue value. * * @param val the hue to add to this color's hue * * @return the new {@link Granite.Drawing.Color} */ public Color add_hue (double val) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); h = (((h + val) % 360) + 360) % 360; hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Changes this color's saturation to the supplied saturation, if it is greater than this color's saturation. * * @param sat the saturation to change this color to * * @return the new {@link Granite.Drawing.Color} */ public Color set_min_sat (double sat) requires (sat >= 0 && sat <= 1) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); s = double.max (s, sat); hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Changes this color's value to the supplied value, if it is greater than this color's value. * * @param val the value to change this color to * * @return the new {@link Granite.Drawing.Color} */ public Color set_min_value (double val) requires (val >= 0 && val <= 1) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); v = double.max (v, val); hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Changes this color's saturation to the supplied saturation, if it is smaller than this color's saturation. * * @param sat the hue to change this color to * * @return the new {@link Granite.Drawing.Color} */ public Color set_max_sat (double sat) requires (sat >= 0 && sat <= 1) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); s = double.min (s, sat); hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Changes this color's value to the supplied value, if it is smaller than this color's value. * * @param val the value to change this color to * * @return the new {@link Granite.Drawing.Color} */ public Color set_max_val (double val) requires (val >= 0 && val <= 1) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); v = double.min (v, val); hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Multiplies this color's saturation by the supplied amount. * * @param amount the amount to multiply the saturation by * * @return the new {@link Granite.Drawing.Color} */ public Color multiply_sat (double amount) requires (amount >= 0) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); s = double.min (1, s * amount); hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Brightens this color's value by the supplied amount. * * @param amount the amount to brighten the value by * * @return the new {@link Granite.Drawing.Color} */ public Color brighten_val (double amount) requires (amount >= 0 && amount <= 1) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); v = double.min (1, v + (1 - v) * amount); hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Darkens this color's value by the supplied amount. * * @param amount the amount to darken the value by * * @return the new {@link Granite.Drawing.Color} */ public Color darken_val (double amount) requires (amount >= 0 && amount <= 1) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); v = double.max (0, v - (1 - v) * amount); hsv_to_rgb (h, s, v, out R, out G, out B); return this; } /** * Darkens this color's value by the supplied amount * color's saturation. * * @param amount the amount to darken the value by * * @return the new {@link Granite.Drawing.Color} */ public Color darken_by_sat (double amount) requires (amount >= 0 && amount <= 1) { double h, s, v; rgb_to_hsv (R, G, B, out h, out s, out v); v = double.max (0, v - amount * s); hsv_to_rgb (h, s, v, out R, out G, out B); return this; } void rgb_to_hsv (double r, double g, double b, out double h, out double s, out double v) requires (r >= 0 && r <= 1) requires (g >= 0 && g <= 1) requires (b >= 0 && b <= 1) { var min = double.min (r, double.min (g, b)); var max = double.max (r, double.max (g, b)); v = max; if (v == 0) { h = 0; s = 0; return; } // normalize value to 1 r /= v; g /= v; b /= v; min = double.min (r, double.min (g, b)); max = double.max (r, double.max (g, b)); var delta = max - min; s = delta; if (s == 0) { h = 0; return; } // normalize saturation to 1 r = (r - min) / delta; g = (g - min) / delta; b = (b - min) / delta; if (max == r) { h = 0 + 60 * (g - b); if (h < 0) h += 360; } else if (max == g) { h = 120 + 60 * (b - r); } else { h = 240 + 60 * (r - g); } } void hsv_to_rgb (double h, double s, double v, out double r, out double g, out double b) requires (h >= 0 && h <= 360) requires (s >= 0 && s <= 1) requires (v >= 0 && v <= 1) { r = 0; g = 0; b = 0; if (s == 0) { r = v; g = v; b = v; } else { var secNum = (int) Math.floor (h / 60); var fracSec = h / 60.0 - secNum; var p = v * (1 - s); var q = v * (1 - s * fracSec); var t = v * (1 - s * (1 - fracSec)); switch (secNum) { case 0: r = v; g = t; b = p; break; case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; case 5: r = v; g = p; b = q; break; } } } /** * {@inheritDoc} */ public string settings_serialize () { return "%d;;%d;;%d;;%d".printf ((int) (R * uint8.MAX), (int) (G * uint8.MAX), (int) (B * uint8.MAX), (int) (A * uint8.MAX)); } /** * {@inheritDoc} */ public void settings_deserialize (string s) { var parts = s.split (";;"); R = double.min (uint8.MAX, double.max (0, int.parse(parts [0]))) / uint8.MAX; G = double.min (uint8.MAX, double.max (0, int.parse(parts [1]))) / uint8.MAX; B = double.min (uint8.MAX, double.max (0, int.parse(parts [2]))) / uint8.MAX; A = double.min (uint8.MAX, double.max (0, int.parse(parts [3]))) / uint8.MAX; } } } granite-0.3.0/lib/Drawing/BufferSurface.vala000644 001750 001750 00000062417 12340443640 022411 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Robert Dyer, Rico Tzschichholz This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Cairo; using Posix; namespace Granite.Drawing { /** * A buffer containing an internal Cairo-usable surface and context, designed * for usage with large, rarely updated draw operations. */ public class BufferSurface : GLib.Object { private Surface _surface; /** * The {@link Cairo.Surface} which will store the results of all drawing operations * made with {@link Granite.Drawing.BufferSurface.context}. */ public Surface surface { get { if (_surface == null) _surface = new ImageSurface (Format.ARGB32, width, height); return _surface; } private set { _surface = value; } } /** * The width of the {@link Granite.Drawing.BufferSurface}, in pixels. */ public int width { get; private set; } /** * The height of the BufferSurface, in pixels. */ public int height { get; private set; } private Context _context; /** * The {@link Cairo.Context} for the internal surface. All drawing operations done on this * {@link Granite.Drawing.BufferSurface} should use this context. */ public Cairo.Context context { get { if (_context == null) _context = new Cairo.Context (surface); return _context; } } /** * Constructs a new, empty {@link Granite.Drawing.BufferSurface} with the supplied dimensions. * * @param width the width of {@link Granite.Drawing.BufferSurface}, in pixels * @param height the height of the {@link Granite.Drawing.BufferSurface}, in pixels */ public BufferSurface (int width, int height) requires (width >= 0 && height >= 0) { this.width = width; this.height = height; } /** * Constructs a new, empty {@link Granite.Drawing.BufferSurface} with the supplied dimensions, using * the supplied {@link Cairo.Surface} as a model. * * @param width the width of the new {@link Granite.Drawing.BufferSurface}, in pixels * @param height the height of the new {@link Granite.Drawing.BufferSurface}, in pixels * @param model the {@link Cairo.Surface} to use as a model for the internal {@link Cairo.Surface} */ public BufferSurface.with_surface (int width, int height, Surface model) requires (model != null) { this (width, height); surface = new Surface.similar (model, Content.COLOR_ALPHA, width, height); } /** * Constructs a new, empty {@link Granite.Drawing.BufferSurface} with the supplied dimensions, using * the supplied {@link Granite.Drawing.BufferSurface} as a model. * * @param width the width of the new {@link Granite.Drawing.BufferSurface}, in pixels * @param height the height of the new {@link Granite.Drawing.BufferSurface}, in pixels * @param model the {@link Granite.Drawing.BufferSurface} to use as a model for the internal {@link Cairo.Surface} */ public BufferSurface.with_buffer_surface (int width, int height, BufferSurface model) requires (model != null) { this (width, height); surface = new Surface.similar (model.surface, Content.COLOR_ALPHA, width, height); } /** * Clears the internal {@link Cairo.Surface}, making all pixels fully transparent. */ public void clear () { context.save (); _context.set_source_rgba (0, 0, 0, 0); _context.set_operator (Operator.SOURCE); _context.paint (); _context.restore (); } /** * Creates a {@link Gdk.Pixbuf} from internal {@link Cairo.Surface}. * * @return the {@link Gdk.Pixbuf} */ public Gdk.Pixbuf load_to_pixbuf () { var image_surface = new ImageSurface (Format.ARGB32, width, height); var cr = new Cairo.Context (image_surface); cr.set_operator (Operator.SOURCE); cr.set_source_surface (surface, 0, 0); cr.paint (); var width = image_surface.get_width (); var height = image_surface.get_height (); var pb = new Gdk.Pixbuf (Gdk.Colorspace.RGB, true, 8, width, height); pb.fill (0x00000000); uint8 *data = image_surface.get_data (); uint8 *pixels = pb.get_pixels (); var length = width * height; if (image_surface.get_format () == Format.ARGB32) { for (var i = 0; i < length; i++) { // if alpha is 0 set nothing if (data[3] > 0) { pixels[0] = (uint8) (data[2] * 255 / data[3]); pixels[1] = (uint8) (data[1] * 255 / data[3]); pixels[2] = (uint8) (data[0] * 255 / data[3]); pixels[3] = data[3]; } pixels += 4; data += 4; } } else if (image_surface.get_format () == Format.RGB24) { for (var i = 0; i < length; i++) { pixels[0] = data[2]; pixels[1] = data[1]; pixels[2] = data[0]; pixels[3] = data[3]; pixels += 4; data += 4; } } return pb; } /** * Averages all the colors in the internal {@link Cairo.Surface}. * * @return the {@link Granite.Drawing.Color} with the averaged color */ public Drawing.Color average_color () { var bTotal = 0.0; var gTotal = 0.0; var rTotal = 0.0; var w = width; var h = height; var original = new ImageSurface (Format.ARGB32, w, h); var cr = new Cairo.Context (original); cr.set_operator (Operator.SOURCE); cr.set_source_surface (surface, 0, 0); cr.paint (); uint8 *data = original.get_data (); var length = w * h; for (var i = 0; i < length; i++) { uint8 b = data [0]; uint8 g = data [1]; uint8 r = data [2]; uint8 max = (uint8) double.max (r, double.max (g, b)); uint8 min = (uint8) double.min (r, double.min (g, b)); double delta = max - min; var sat = delta == 0 ? 0.0 : delta / max; var score = 0.2 + 0.8 * sat; bTotal += b * score; gTotal += g * score; rTotal += r * score; data += 4; } return new Drawing.Color (rTotal / uint8.MAX / length, gTotal / uint8.MAX / length, bTotal / uint8.MAX / length, 1).set_val (0.8).multiply_sat (1.15); } /** * Performs a blur operation on the internal {@link Cairo.Surface}, using the * fast-blur algorithm found here [[http://incubator.quasimondo.com/processing/superfastblur.pde]]. * * @param radius the blur radius * @param process_count the number of times to perform the operation */ public void fast_blur (int radius, int process_count = 1) { if (radius < 1 || process_count < 1) return; var w = width; var h = height; var channels = 4; if (radius > w - 1 || radius > h - 1) return; var original = new ImageSurface (Format.ARGB32, w, h); var cr = new Cairo.Context (original); cr.set_operator (Operator.SOURCE); cr.set_source_surface (surface, 0, 0); cr.paint (); uint8 *pixels = original.get_data (); var buffer = new uint8[w * h * channels]; var vmin = new int[int.max (w, h)]; var vmax = new int[int.max (w, h)]; var div = 2 * radius + 1; var dv = new uint8[256 * div]; for (var i = 0; i < dv.length; i++) dv[i] = (uint8) (i / div); while (process_count-- > 0) { for (var x = 0; x < w; x++) { vmin[x] = int.min (x + radius + 1, w - 1); vmax[x] = int.max (x - radius, 0); } for (var y = 0; y < h; y++) { var asum = 0, rsum = 0, gsum = 0, bsum = 0; uint32 cur_pixel = y * w * channels; asum += radius * pixels[cur_pixel + 0]; rsum += radius * pixels[cur_pixel + 1]; gsum += radius * pixels[cur_pixel + 2]; bsum += radius * pixels[cur_pixel + 3]; for (var i = 0; i <= radius; i++) { asum += pixels[cur_pixel + 0]; rsum += pixels[cur_pixel + 1]; gsum += pixels[cur_pixel + 2]; bsum += pixels[cur_pixel + 3]; cur_pixel += channels; } cur_pixel = y * w * channels; for (var x = 0; x < w; x++) { uint32 p1 = (y * w + vmin[x]) * channels; uint32 p2 = (y * w + vmax[x]) * channels; buffer[cur_pixel + 0] = dv[asum]; buffer[cur_pixel + 1] = dv[rsum]; buffer[cur_pixel + 2] = dv[gsum]; buffer[cur_pixel + 3] = dv[bsum]; asum += pixels[p1 + 0] - pixels[p2 + 0]; rsum += pixels[p1 + 1] - pixels[p2 + 1]; gsum += pixels[p1 + 2] - pixels[p2 + 2]; bsum += pixels[p1 + 3] - pixels[p2 + 3]; cur_pixel += channels; } } for (var y = 0; y < h; y++) { vmin[y] = int.min (y + radius + 1, h - 1) * w; vmax[y] = int.max (y - radius, 0) * w; } for (var x = 0; x < w; x++) { var asum = 0, rsum = 0, gsum = 0, bsum = 0; uint32 cur_pixel = x * channels; asum += radius * buffer[cur_pixel + 0]; rsum += radius * buffer[cur_pixel + 1]; gsum += radius * buffer[cur_pixel + 2]; bsum += radius * buffer[cur_pixel + 3]; for (var i = 0; i <= radius; i++) { asum += buffer[cur_pixel + 0]; rsum += buffer[cur_pixel + 1]; gsum += buffer[cur_pixel + 2]; bsum += buffer[cur_pixel + 3]; cur_pixel += w * channels; } cur_pixel = x * channels; for (var y = 0; y < h; y++) { uint32 p1 = (x + vmin[y]) * channels; uint32 p2 = (x + vmax[y]) * channels; pixels[cur_pixel + 0] = dv[asum]; pixels[cur_pixel + 1] = dv[rsum]; pixels[cur_pixel + 2] = dv[gsum]; pixels[cur_pixel + 3] = dv[bsum]; asum += buffer[p1 + 0] - buffer[p2 + 0]; rsum += buffer[p1 + 1] - buffer[p2 + 1]; gsum += buffer[p1 + 2] - buffer[p2 + 2]; bsum += buffer[p1 + 3] - buffer[p2 + 3]; cur_pixel += w * channels; } } } original.mark_dirty (); context.set_operator (Operator.SOURCE); context.set_source_surface (original, 0, 0); context.paint (); context.set_operator (Operator.OVER); } const int AlphaPrecision = 16; const int ParamPrecision = 7; /** * Performs a blur operation on the internal {@link Cairo.Surface}, using an * exponential blurring algorithm. This method is usually the fastest * and produces good-looking results (though not quite as good as gaussian's). * * @param radius the blur radius */ public void exponential_blur (int radius) { if (radius < 1) return; var alpha = (int) ((1 << AlphaPrecision) * (1.0 - Math.exp (-2.3 / (radius + 1.0)))); var height = this.height; var width = this.width; var original = new ImageSurface (Format.ARGB32, width, height); var cr = new Cairo.Context (original); cr.set_operator (Operator.SOURCE); cr.set_source_surface (surface, 0, 0); cr.paint (); uint8 *pixels = original.get_data (); try { // Process Rows var th = new Thread.try (null, () => { exponential_blur_rows (pixels, width, height, 0, height / 2, 0, width, alpha); return null; }); exponential_blur_rows (pixels, width, height, height / 2, height, 0, width, alpha); th.join (); // Process Columns var th2 = new Thread.try (null, () => { exponential_blur_columns (pixels, width, height, 0, width / 2, 0, height, alpha); return null; }); exponential_blur_columns (pixels, width, height, width / 2, width, 0, height, alpha); th2.join (); } catch (Error err) { warning (err.message); } original.mark_dirty (); context.set_operator (Operator.SOURCE); context.set_source_surface (original, 0, 0); context.paint (); context.set_operator (Operator.OVER); } void exponential_blur_columns (uint8* pixels, int width, int height, int startCol, int endCol, int startY, int endY, int alpha) { for (var columnIndex = startCol; columnIndex < endCol; columnIndex++) { // blur columns uint8 *column = pixels + columnIndex * 4; var zA = column[0] << ParamPrecision; var zR = column[1] << ParamPrecision; var zG = column[2] << ParamPrecision; var zB = column[3] << ParamPrecision; // Top to Bottom for (var index = width * (startY + 1); index < (endY - 1) * width; index += width) exponential_blur_inner (&column[index * 4], ref zA, ref zR, ref zG, ref zB, alpha); // Bottom to Top for (var index = (endY - 2) * width; index >= startY; index -= width) exponential_blur_inner (&column[index * 4], ref zA, ref zR, ref zG, ref zB, alpha); } } void exponential_blur_rows (uint8* pixels, int width, int height, int startRow, int endRow, int startX, int endX, int alpha) { for (var rowIndex = startRow; rowIndex < endRow; rowIndex++) { // Get a pointer to our current row uint8* row = pixels + rowIndex * width * 4; var zA = row[startX + 0] << ParamPrecision; var zR = row[startX + 1] << ParamPrecision; var zG = row[startX + 2] << ParamPrecision; var zB = row[startX + 3] << ParamPrecision; // Left to Right for (var index = startX + 1; index < endX; index++) exponential_blur_inner (&row[index * 4], ref zA, ref zR, ref zG, ref zB, alpha); // Right to Left for (var index = endX - 2; index >= startX; index--) exponential_blur_inner (&row[index * 4], ref zA, ref zR, ref zG, ref zB, alpha); } } private static inline void exponential_blur_inner (uint8* pixel, ref int zA, ref int zR, ref int zG, ref int zB, int alpha) { zA += (alpha * ((pixel[0] << ParamPrecision) - zA)) >> AlphaPrecision; zR += (alpha * ((pixel[1] << ParamPrecision) - zR)) >> AlphaPrecision; zG += (alpha * ((pixel[2] << ParamPrecision) - zG)) >> AlphaPrecision; zB += (alpha * ((pixel[3] << ParamPrecision) - zB)) >> AlphaPrecision; pixel[0] = (uint8) (zA >> ParamPrecision); pixel[1] = (uint8) (zR >> ParamPrecision); pixel[2] = (uint8) (zG >> ParamPrecision); pixel[3] = (uint8) (zB >> ParamPrecision); } /** * Performs a blur operation on the internal {@link Cairo.Surface}, using a * gaussian blurring algorithm. This method is very slow, albeit producing * debatably the best-looking results, and in most cases developers should * use the exponential blurring algorithm instead. * * @param radius the blur radius */ public void gaussian_blur (int radius) { var gausswidth = radius * 2 + 1; var kernel = build_gaussian_kernel (gausswidth); var width = this.width; var height = this.height; var original = new ImageSurface (Format.ARGB32, width, height); var cr = new Cairo.Context (original); cr.set_operator (Operator.SOURCE); cr.set_source_surface (surface, 0, 0); cr.paint (); uint8 *src = original.get_data (); var size = height * original.get_stride (); var abuffer = new double[size]; var bbuffer = new double[size]; // Copy image to double[] for faster horizontal pass for (var i = 0; i < size; i++) abuffer[i] = (double) src[i]; // Precompute horizontal shifts var shiftar = new int[int.max (width, height), gausswidth]; for (var x = 0; x < width; x++) for (var k = 0; k < gausswidth; k++) { var shift = k - radius; if (x + shift <= 0 || x + shift >= width) shiftar[x, k] = 0; else shiftar[x, k] = shift * 4; } try { // Horizontal Pass var th = new Thread.try (null, () => { gaussian_blur_horizontal (abuffer, bbuffer, kernel, gausswidth, width, height, 0, height / 2, shiftar); return null; }); gaussian_blur_horizontal (abuffer, bbuffer, kernel, gausswidth, width, height, height / 2, height, shiftar); th.join (); // Clear buffer memset (abuffer, 0, sizeof(double) * size); // Precompute vertical shifts shiftar = new int[int.max (width, height), gausswidth]; for (var y = 0; y < height; y++) for (var k = 0; k < gausswidth; k++) { var shift = k - radius; if (y + shift <= 0 || y + shift >= height) shiftar[y, k] = 0; else shiftar[y, k] = shift * width * 4; } // Vertical Pass var th2 = new Thread.try (null, () => { gaussian_blur_vertical (bbuffer, abuffer, kernel, gausswidth, width, height, 0, width / 2, shiftar); return null; }); gaussian_blur_vertical (bbuffer, abuffer, kernel, gausswidth, width, height, width / 2, width, shiftar); th2.join (); } catch (Error err) { message (err.message); } // Save blurred image to original uint8[] for (var i = 0; i < size; i++) src[i] = (uint8) abuffer[i]; original.mark_dirty (); context.set_operator (Operator.SOURCE); context.set_source_surface (original, 0, 0); context.paint (); context.set_operator (Operator.OVER); } void gaussian_blur_horizontal (double* src, double* dest, double* kernel, int gausswidth, int width, int height, int startRow, int endRow, int[,] shift) { uint32 cur_pixel = startRow * width * 4; for (var y = startRow; y < endRow; y++) { for (var x = 0; x < width; x++) { for (var k = 0; k < gausswidth; k++) { var source = cur_pixel + shift[x, k]; dest[cur_pixel + 0] += src[source + 0] * kernel[k]; dest[cur_pixel + 1] += src[source + 1] * kernel[k]; dest[cur_pixel + 2] += src[source + 2] * kernel[k]; dest[cur_pixel + 3] += src[source + 3] * kernel[k]; } cur_pixel += 4; } } } void gaussian_blur_vertical (double* src, double* dest, double* kernel, int gausswidth, int width, int height, int startCol, int endCol, int[,] shift) { uint32 cur_pixel = startCol * 4; for (var y = 0; y < height; y++) { for (var x = startCol; x < endCol; x++) { for (var k = 0; k < gausswidth; k++) { var source = cur_pixel + shift[y, k]; dest[cur_pixel + 0] += src[source + 0] * kernel[k]; dest[cur_pixel + 1] += src[source + 1] * kernel[k]; dest[cur_pixel + 2] += src[source + 2] * kernel[k]; dest[cur_pixel + 3] += src[source + 3] * kernel[k]; } cur_pixel += 4; } cur_pixel += (width - endCol + startCol) * 4; } } static double[] build_gaussian_kernel (int gausswidth) requires (gausswidth % 2 == 1) { var kernel = new double[gausswidth]; // Maximum value of curve var sd = 255.0; // width of curve var range = gausswidth; // Average value of curve var mean = range / sd; for (var i = 0; i < gausswidth / 2 + 1; i++) kernel[gausswidth - i - 1] = kernel[i] = Math.pow (Math.sin (((i + 1) * (Math.PI / 2) - mean) / range), 2) * sd; // normalize the values var gaussSum = 0.0; foreach (var d in kernel) gaussSum += d; for (var i = 0; i < kernel.length; i++) kernel[i] = kernel[i] / gaussSum; return kernel; } } } granite-0.3.0/lib/Drawing/Utilities.vala000644 001750 001750 00000007374 12340443640 021643 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Maxwell Barvian , Robert Dyer This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Cairo; using Gdk; using Gtk; using Granite.Services; namespace Granite.Drawing { /** * A utility class for frequently-performed drawing operations. */ public class Utilities : GLib.Object { /** * Adds a closed sub-path rounded rectangle of the given size and border radius to the current path * at position (x, y) in user-space coordinates. * * @param cr a {@link Cairo.Context} * @param x the X coordinate of the top left corner of the rounded rectangle * @param y the Y coordinate to the top left corner of the rounded rectangle * @param width the width of the rounded rectangle * @param height the height of the rounded rectangle * @param radius the border radius of the rounded rectangle */ public static void cairo_rounded_rectangle (Cairo.Context cr, double x, double y, double width, double height, double radius) { cr.move_to (x + radius, y); cr.arc (x + width - radius, y + radius, radius, Math.PI * 1.5, Math.PI * 2); cr.arc (x + width - radius, y + height - radius, radius, 0, Math.PI * 0.5); cr.arc (x + radius, y + height - radius, radius, Math.PI * 0.5, Math.PI); cr.arc (x + radius, y + radius, radius, Math.PI, Math.PI * 1.5); cr.close_path (); } /** * Averages the colors in the {@link Gdk.Pixbuf} and returns it. * * @param source the {@link Gdk.Pixbuf} * * @return the {@link Granite.Drawing.Color} containing the averaged color */ public static Drawing.Color average_color (Pixbuf source) { var rTotal = 0.0; var gTotal = 0.0; var bTotal = 0.0; uint8* dataPtr = source.get_pixels (); double pixels = source.height * source.rowstride / source.n_channels; for (var i = 0; i < pixels; i++) { var r = dataPtr [0]; var g = dataPtr [1]; var b = dataPtr [2]; var max = (uint8) double.max (r, double.max (g, b)); var min = (uint8) double.min (r, double.min (g, b)); double delta = max - min; var sat = delta == 0 ? 0.0 : delta / max; var score = 0.2 + 0.8 * sat; rTotal += r * score; gTotal += g * score; bTotal += b * score; dataPtr += source.n_channels; } return new Drawing.Color (rTotal / uint8.MAX / pixels, gTotal / uint8.MAX / pixels, bTotal / uint8.MAX / pixels, 1).set_val (0.8).multiply_sat (1.15); } } } granite-0.3.0/lib/Services/IconFactory.vala000644 001750 001750 00000011225 12340443640 022266 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 ammonkey , Mario Guerriero This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Services { public static IconFactory? icon_factory = null; /** * This class provides an easy way to access symbolic icons. */ public class IconFactory : GLib.Object { private Gtk.IconTheme icon_theme; public class IconFactory () { icon_theme = Gtk.IconTheme.get_default (); } public static IconFactory get_default () { if (icon_factory != null) return icon_factory; icon_factory = new IconFactory (); return icon_factory; } /** * Attempts to load a symbolic icon for the given {@link Glib.Icon} * with graceful fallback on the non-symbolic variant if the symbolic one * does not exist. * * Note that the resulting pixbuf may not be exactly the requested size; * an icon theme may have icons that differ slightly from their nominal sizes, * and in addition GTK+ will avoid scaling icons that it considers sufficiently close * to the requested size or for which the source image would have to be scaled up too far * (this maintains sharpness). * * @return a {@link Gdk.Pixbuf} with the rendered icon; this may be a newly created icon * or a new reference to an internal icon, so you must not modify the icon. * Returns null if the icon was not found in the theme hierarchy. */ public Gdk.Pixbuf? load_symbolic_icon_from_gicon (Gtk.StyleContext style, GLib.Icon gicon, int size) { Gdk.Pixbuf px = null; Gtk.IconInfo icon_info = icon_theme.lookup_by_gicon (gicon, size, Gtk.IconLookupFlags.GENERIC_FALLBACK); if (icon_info == null) return null; try { px = icon_info.load_symbolic_for_context (style); } catch (Error err) { stderr.printf ("Unable to load symbolic icon: %s", err.message); } return px; } /** * Loads a symbolic icon for the given icon name with a better chance * for loading a symbolic icon in case of fallback than with {@link Gtk.IconTheme.load_icon} * * Note that the resulting pixbuf may not be exactly the requested size; * an icon theme may have icons that differ slightly from their nominal sizes, * and in addition GTK+ will avoid scaling icons that it considers sufficiently close * to the requested size or for which the source image would have to be scaled up too far * (this maintains sharpness). * * Due to the way {@link Gtk.IconLookupFlags.GENERIC_FALLBACK} works, Gtk readily * falls back to the non-symbolic icon if the exact match for the provided name is not found, * and only after that fails tries to look up alternative names of the icon itself. * This function uses the same mechanism, but looks up the symbolic icon for the * name chosen after all the fallbacks, and returns the symbolic one if it's present. * This gives a better chance of getting a symbolic icon in case of fallbacks than * when using {@link Gtk.IconTheme.load_icon} * * @return a {@link Gdk.Pixbuf} with the rendered icon; this may be a newly created icon * or a new reference to an internal icon, so you must not modify the icon. * Returns null if the icon was not found in the theme hierarchy. */ public Gdk.Pixbuf? load_symbolic_icon (Gtk.StyleContext style, string iconname, int size) { ThemedIcon themed_icon = new ThemedIcon.with_default_fallbacks (iconname); return load_symbolic_icon_from_gicon (style, (GLib.Icon) themed_icon, size); } } } granite-0.3.0/lib/Services/Settings.vala000644 001750 001750 00000033072 12340443640 021652 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Robert Dyer, Rico Tzschichholz This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Services { /** * This interface is used by objects that need to be serialized in a Settings. * The object must have a string representation and provide these methods to * translate between the string and object representations. */ public interface SettingsSerializable : GLib.Object { /** * Serializes the object into a string representation. * * @return the string representation of the object */ public abstract string settings_serialize (); /** * Un-serializes the object from a string representation. * * @param s the string representation of the object */ public abstract void settings_deserialize (string s); } /** * Class for interacting with an internal {@link GLib.Settings} using native Vala properties. * Clients of this class should not connect to the {@link GLib.Object.notify} signal. * Instead, they should connect to the {@link Granite.Services.Settings.changed} signal. * * For example, if a developer wanted to interact with desktop.Wallpaper's (http:/www.launchpad.net/pantheon-wallpaper) schema, * this is what his/her subclass might look like: * * {{{ * public class WallpaperSettings : Granite.Services.Settings { * * public PictureMode picture_mode { get; set; } * * public string picture_path { get; set; } * * public string background_color { get; set; } * * public WallpaperSettings () { * base ("desktop.Wallpaper"); * } * * protected override void verify (string key) { * * switch (key) { * * case "background-color": * Gdk.Color bg; * if (!Gdk.Color.parse (background_color, out bg)) * background_color = "#000000"; * break; * } * } * * } * }}} * * Keep in mind that the developer must define his/her enums to match the schema's. * * The following is a simplified explanation of how this library works: * * 1. Any subclass looks at all properties it contains, and loads their initial values from the keys they represent. * Because Vala properties are stored as GLib properties, the string representation of a property replaces underscores with * hyphens (i.e. property_name becomes "property-name"). This is how this library knows which keys to load from. If the key * does not exist, it will result in a fatal error. * 1. When a property of the subclass changes, the library will first verify the data before emitting a changed signal. If necessary, * the library will change the value of the property while verifying. * This is why developers should only act upon emissions of the changed () signal and never the native {@link GLib.Object.notify} signal. * 1. When the corresponding key of one of the properties of the subclass changes, it will also verify the data and change it, if necessary, * before loading it into as the corresponding property's value. */ public abstract class Settings : GLib.Object { /** * This signal is to be used in place of the standard {@link GLib.Object.notify} signal. * * This signal ''only'' emits after a property's value was verified. * * Note that in the case where a property was set to an invalid value, * (and thus, sanitized to a valid value), the {@link GLib.Object.notify} signal will emit * twice: once with the invalid value and once with the sanitized value. */ [Signal (no_recurse = true, run = "first", action = true, no_hooks = true, detailed = true)] public signal void changed (); public GLib.Settings schema { get; construct; } /** * Creates a new {@link Granite.Services.Settings} object for the supplied schema. * * @param schema the name of the schema to interact with */ public Settings (string schema) { Object (schema: new GLib.Settings (schema)); } /** * Creates a new {@link Granite.Services.Settings} object for the supplied schema and {@link GLib.SettingsBackend}. * * @param schema the name of the schema to interact with * @param backend the desired backend to use */ public Settings.with_backend (string schema, SettingsBackend backend) { Object (schema: new GLib.Settings.with_backend (schema, backend)); } /** * Creates a new {@link Granite.Services.Settings} object for the supplied schema, {@link GLib.SettingsBackend}, and path. * * * @param schema the name of the schema to interact with * @param backend the desired backend to use * @param path the path to use */ public Settings.with_backend_and_path (string schema, SettingsBackend backend, string path) { Object (schema: new GLib.Settings.with_backend_and_path (schema, backend, path)); } /** * Creates a new {@link Granite.Services.Settings} object for the supplied schema, and path. * * You only need to do this if you want to directly create a settings object with a schema that * doesn't have a specified path of its own. That's quite rare. * * It is a programmer error to call this function for a schema that has an explicitly specified path. * * @param schema the name of the schema to interact with * @param path the path to use */ public Settings.with_path (string schema, string path) { Object (schema: new GLib.Settings.with_path (schema, path)); } construct { debug ("Loading settings from schema '%s'", schema.schema); var obj_class = (ObjectClass) get_type ().class_ref (); var properties = obj_class.list_properties (); foreach (var prop in properties) load_key (prop.name); start_monitor (); } ~Settings () { stop_monitor (); } private void stop_monitor () { schema.changed.disconnect (load_key); } private void start_monitor () { schema.changed.connect (load_key); } void handle_notify (Object sender, ParamSpec property) { notify.disconnect (handle_notify); call_verify (property.name); notify.connect (handle_notify); save_key (property.name); } void handle_verify_notify (Object sender, ParamSpec property) { warning ("Key '%s' failed verification in schema '%s', changing value", property.name, schema.schema); } private void call_verify (string key) { notify.connect (handle_verify_notify); verify (key); changed[key] (); notify.disconnect (handle_verify_notify); } /** * Verify the given key, changing the property if necessary. Refer to the example given for the class. * * @param key the key in question */ protected virtual void verify (string key) { // do nothing, this isnt abstract because we dont // want to force subclasses to implement this } private void load_key (string key) { if (key == "schema") return; var obj_class = (ObjectClass) get_type ().class_ref (); var prop = obj_class.find_property (key); // If a property for the key is not found, just return. Subclasses do not // necessarily have to import all the keys from a given schema. if (prop == null) return; notify.disconnect (handle_notify); var type = prop.value_type; var val = Value (type); this.get_property (prop.name, ref val); if(val.type() == prop.value_type) { // As all of these Properties are equal to their Settings Key, we can // apply them directly without problems. if(type == typeof (int)) set_property (prop.name, schema.get_int (key)); else if(type == typeof (uint)) set_property (prop.name, schema.get_uint (key)); else if(type == typeof (double)) set_property (prop.name, schema.get_double (key)); else if(type == typeof (string)) set_property (prop.name, schema.get_string (key)); else if(type == typeof (string[])) set_property (prop.name, schema.get_strv (key)); else if(type == typeof (bool)) set_property (prop.name, schema.get_boolean (key)); else if(type.is_enum ()) set_property (prop.name, schema.get_enum (key)); } else if (type.is_a (typeof (SettingsSerializable))) { get_property (key, ref val); (val.get_object () as SettingsSerializable).settings_deserialize (schema.get_string (key)); notify.connect (handle_notify); return; } else { debug ("Unsupported settings type '%s' for key '%s' in schema '%s'", type.name (), key, schema.schema); notify.connect (handle_notify); return; } call_verify (key); notify.connect (handle_notify); } void save_key (string key) { if (key == "schema") return; var obj_class = (ObjectClass) get_type ().class_ref (); var prop = obj_class.find_property (key); // Do not attempt to save a non-mapped key if (prop == null) return; bool success = true; stop_monitor (); notify.disconnect (handle_notify); var type = prop.value_type; var val = Value (type); this.get_property (prop.name, ref val); if(val.type() == prop.value_type) { if(type == typeof (int)) { if (val.get_int () != schema.get_int (key)) { success = schema.set_int (key, val.get_int ()); } } else if(type == typeof (uint)) { if (val.get_uint () != schema.get_uint (key)) { success = schema.set_uint (key, val.get_uint ()); } } else if(type == typeof (double)) { if (val.get_double () != schema.get_double (key)) { success = schema.set_double (key, val.get_double ()); } } else if(type == typeof (string)) { if (val.get_string () != schema.get_string (key)) { success = schema.set_string (key, val.get_string ()); } } else if(type == typeof (string[])) { string[] strings = null; this.get(key, &strings); if (strings != schema.get_strv (key)) { success = schema.set_strv (key, strings); } } else if(type == typeof (bool)) { if (val.get_boolean () != schema.get_boolean (key)) { success = schema.set_boolean (key, val.get_boolean ()); } } else if(type.is_enum ()) { if (val.get_enum () != schema.get_enum (key)) { success = schema.set_enum (key, val.get_enum ()); } } } else if (type.is_a (typeof (SettingsSerializable))) success = schema.set_string (key, (val.get_object () as SettingsSerializable).settings_serialize ()); else debug ("Unsupported settings type '%s' for key '%s' in schema '%s'", type.name (), key, schema.schema); if (!success) warning ("Key '%s' could not be written to.", key); notify.connect (handle_notify); start_monitor (); } } } granite-0.3.0/lib/Services/Logger.vala000644 001750 001750 00000015322 12340443640 021267 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Robert Dyer This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Services { /** * LogLevel: */ public enum LogLevel { /** * This level is for use in debugging. */ DEBUG, /** * This level should be used for non-error, non-debugging that is not due to any direct event. */ INFO, /** * This level is used to log events that have happened in the app. */ NOTIFY, /** * This level should be used for warnings of errors that haven't happened yet. */ WARN, /** * This level should be used by recoverable errors. */ ERROR, /** * This level should be used only in cases of unrecoverable errors. */ FATAL, } enum ConsoleColor { BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, } /** * This class helps in the use of logs in a Granite application. * */ public class Logger : GLib.Object { /** * This is used to determine which level of LogLevelling should be used. */ public static LogLevel DisplayLevel { get; set; default = LogLevel.WARN; } /** * The name of the app that is logging. */ static string AppName { get; set; } static Regex re; /** * This method initializes the Logger * * @param app_name name of app that is logging */ public static void initialize (string app_name) { AppName = app_name; /*try { re = new Regex ("""(.*)\.vala(:\d+): (.*)"""); } catch { }*/ Log.set_default_handler (glib_log_func); } /** * Formats a message to be logged * * @param msg message to be formatted */ static string format_message (string msg) { if (re != null && re.match (msg)) { var parts = re.split (msg); return "[%s%s] %s".printf (parts[1], parts[2], parts[3]); } return msg; } /** * Logs message using Notify level formatting * * @param msg message to be logged */ public static void notification (string msg) { write (LogLevel.NOTIFY, format_message (msg)); } static string get_time () { var now = new GLib.DateTime.now_local (); return "%.2d:%.2d:%.2d.%.6d".printf (now.get_hour (), now.get_minute (), now.get_second (), now.get_microsecond ()); } static void write (LogLevel level, string msg) { if (level < DisplayLevel) return; set_color_for_level (level); stdout.printf ("[%s %s]", level.to_string ().substring (16), get_time ()); reset_color (); stdout.printf (" %s\n", msg); } static void set_color_for_level (LogLevel level) { switch (level) { case LogLevel.DEBUG: set_foreground (ConsoleColor.GREEN); break; case LogLevel.INFO: set_foreground (ConsoleColor.BLUE); break; case LogLevel.NOTIFY: set_foreground (ConsoleColor.MAGENTA); break; case LogLevel.WARN: set_foreground (ConsoleColor.YELLOW); break; case LogLevel.ERROR: set_foreground (ConsoleColor.RED); break; case LogLevel.FATAL: set_background (ConsoleColor.RED); set_foreground (ConsoleColor.WHITE); break; } } static void reset_color () { stdout.printf ("\x001b[0m"); } static void set_foreground (ConsoleColor color) { set_color (color, true); } static void set_background (ConsoleColor color) { set_color (color, false); } static void set_color (ConsoleColor color, bool isForeground) { var color_code = color + 30 + 60; if (!isForeground) color_code += 10; stdout.printf ("\x001b[%dm", color_code); } static void glib_log_func (string? d, LogLevelFlags flags, string msg) { var domain = ""; if (d != null) domain = "[%s] ".printf (d); var message = msg.replace ("\n", "").replace ("\r", ""); message = "%s%s".printf (domain, message); switch (flags) { case LogLevelFlags.LEVEL_CRITICAL: write (LogLevel.FATAL, format_message (message)); write (LogLevel.FATAL, format_message (AppName + " will not function properly.")); break; case LogLevelFlags.LEVEL_ERROR: write (LogLevel.ERROR, format_message (message)); break; case LogLevelFlags.LEVEL_INFO: case LogLevelFlags.LEVEL_MESSAGE: write (LogLevel.INFO, format_message (message)); break; case LogLevelFlags.LEVEL_DEBUG: write (LogLevel.DEBUG, format_message (message)); break; case LogLevelFlags.LEVEL_WARNING: default: write (LogLevel.WARN, format_message (message)); break; } } } } granite-0.3.0/lib/Services/System.vala000644 001750 001750 00000013367 12340443640 021343 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Robert Dyer This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Services { /** * Utility class for frequently-used system-related functions, such as opening files, launching * applications, or executing terminal commands. */ public class System : GLib.Object { /** * Opens the specified URI with the default application. This can be used for opening websites * with the default browser, etc. * * @param uri the URI to open */ public static void open_uri (string uri) { open (File.new_for_uri (uri)); } /** * Opens the specified file with the default application. * * @param file the {@link GLib.File} to open */ public static void open (File file) { launch_with_files (null, { file }); } /** * Opens the specified files with the default application. * * @param files an array of {@link GLib.File} to open */ public static void open_files (File[] files) { launch_with_files (null, files); } /** * Launches the specified application. * * @param app the {@link GLib.File} representing the application to launch */ public static void launch (File app) { launch_with_files (app, new File[] {}); } /** * Executes the specified command. * * @param command the command to execute */ public static bool execute_command (string command) { try { var info = AppInfo.create_from_commandline (command, "", 0); if (info.launch (null, null)) return true; } catch (GLib.Error e) { warning ("Failed to execute external '%s' command", command); } return true; } /** * Launches the supplied files with the specified application. * * @param app the {@link GLib.File} representing the application to launch * @param files an array of {@link GLib.File} to open */ public static void launch_with_files (File? app, File[] files) { if (app != null && !app.query_exists ()) { warning ("Application '%s' doesn't exist", app.get_path ()); return; } var mounted_files = new GLib.List (); // make sure all files are mounted foreach (var f in files) { if (f.get_path () != null && f.get_path () != "" && (f.is_native () || path_is_mounted (f.get_path ()))) { mounted_files.append (f); continue; } try { AppInfo.launch_default_for_uri (f.get_uri (), null); } catch { f.mount_enclosing_volume.begin (0, null); mounted_files.append (f); } } if (mounted_files.length () > 0 || files.length == 0) internal_launch (app, mounted_files); } static bool path_is_mounted (string path) { foreach (var m in VolumeMonitor.get ().get_mounts ()) if (m.get_root () != null && m.get_root ().get_path () != null && path.contains (m.get_root ().get_path ())) return true; return false; } static void internal_launch (File? app, GLib.List files) { if (app == null && files.length () == 0) return; AppInfo info; if (app != null) info = new DesktopAppInfo.from_filename (app.get_path ()); else try { info = files.first ().data.query_default_handler (); } catch { return; } try { if (files.length () == 0) { info.launch (null, null); return; } if (info.supports_files ()) { info.launch (files, null); return; } if (info.supports_uris ()) { var uris = new GLib.List (); foreach (var f in files) uris.append (f.get_uri ()); info.launch_uris (uris, new AppLaunchContext ()); return; } error ("Error opening files. The application doesn't support files/URIs or wasn't found."); } catch (Error e) { debug ("Error: " + e.domain.to_string ()); error (e.message); } } } } granite-0.3.0/lib/Services/Contractor.vala000644 001750 001750 00000004777 12340443640 022202 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Lucas Baudin This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Services { [DBus (name = "org.elementary.Contractor")] interface ContractorDBus : Object { public abstract GLib.HashTable[] GetServicesByLocation (string strlocation, string? file_mime = "") throws IOError; public abstract GLib.HashTable[] GetServicesByLocationsList (GLib.HashTable[] locations) throws IOError; } /** * Wrapper around a long-obsolete and unused revision of Contractor API */ [Deprecated (replacement = "Granite.Services.ContractorProxy", since = "0.2")] public class Contractor : Object { internal ContractorDBus contract; internal static Contractor? contractor = null; /** * This creates a new Contractor */ public Contractor () { } internal static void ensure () { } /** * This searches for available contracts of a particular file * * @param uri uri of file * @param mime mime type of file * @return Hashtable of available contracts */ public static GLib.HashTable[] get_contract (string uri, string mime) { return { new GLib.HashTable (null, null) }; } /** * generate contracts for arguments and filter them by common parent mimetype. * * @param locations Hashtable of locations * @return Hashtable of available contracts */ public static GLib.HashTable[] get_selection_contracts (GLib.HashTable[] locations) { return { new GLib.HashTable (null, null) }; } } } granite-0.3.0/lib/Services/Paths.vala000644 001750 001750 00000013747 12340443640 021140 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Robert Dyer, Rico Tzschichholz This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Services { /** * A class for interacting with frequently-used directories, following the * XDG Base Directory specification: [[http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html]] */ public class Paths : GLib.Object { /** * User's home folder - $HOME */ public static File home_folder { get; protected set; } /** * Path passed in to initialize method; should be Build.PKGDATADIR. */ public static File data_folder { get; protected set; } /** * $XDG_CONFIG_HOME - defaults to $HOME/.config */ public static File xdg_config_home_folder { get; protected set; } /** * $XDG_DATA_HOME - defaults to $HOME/.local/share */ public static File xdg_data_home_folder { get; protected set; } /** * $XDG_CACHE_HOME - defaults to $HOME/.cache */ public static File xdg_cache_home_folder { get; protected set; } /** * $XDG_DATA_DIRS - defaults to /usr/local/share/:/usr/share/ */ public static List xdg_data_dir_folders { get; protected owned set; } /** * defaults to xdg_config_home_folder/app_name */ public static File user_config_folder { get; protected set; } /** * defaults to xdg_data_home_folder/app_name */ public static File user_data_folder { get; protected set; } /** * defaults to xdg_cache_home_folder/app_name */ public static File user_cache_folder { get; protected set; } /** * Initialize all the paths using the supplied app name and path to the app's data folder. * * @param app_name the name of the application * @param data_folder_path the path to the application's data folder */ public static void initialize (string app_name, string data_folder_path) { // get environment-based settings home_folder = File.new_for_path (Environment.get_home_dir ()); data_folder = File.new_for_path (data_folder_path); // get XDG Base Directory settings var xdg_config_home = Environment.get_variable ("XDG_CONFIG_HOME"); var xdg_data_home = Environment.get_variable ("XDG_DATA_HOME"); var xdg_cache_home = Environment.get_variable ("XDG_CACHE_HOME"); var xdg_data_dirs = Environment.get_variable ("XDG_DATA_DIRS"); // determine directories based on XDG with fallbacks if (xdg_config_home == null || xdg_config_home.length == 0) xdg_config_home_folder = home_folder.get_child (".config"); else xdg_config_home_folder = File.new_for_path (xdg_config_home); if (xdg_data_home == null || xdg_data_home.length == 0) xdg_data_home_folder = home_folder.get_child (".local").get_child ("share"); else xdg_data_home_folder = File.new_for_path (xdg_data_home); if (xdg_cache_home == null || xdg_cache_home.length == 0) xdg_cache_home_folder = home_folder.get_child (".cache"); else xdg_cache_home_folder = File.new_for_path (xdg_cache_home); var dirs = new List (); if (xdg_data_dirs == null || xdg_data_dirs.length == 0) { dirs.append (File.new_for_path ("/usr/local/share")); dirs.append (File.new_for_path ("/usr/share")); } else { foreach (var path in xdg_data_dirs.split (":")) dirs.append (File.new_for_path (path)); } xdg_data_dir_folders = dirs.copy (); // set the XDG Base Directory specified directories to use user_config_folder = xdg_config_home_folder.get_child (app_name); user_data_folder = xdg_data_home_folder.get_child (app_name); user_cache_folder = xdg_cache_home_folder.get_child (app_name); // ensure all writable directories exist ensure_directory_exists (user_config_folder); ensure_directory_exists (user_data_folder); ensure_directory_exists (user_cache_folder); } /** * Ensure the directory exists, by creating it if it does not. * * @param dir the directory in question * * @return `true` is the directory exists, `false` if it does not */ public static bool ensure_directory_exists (File dir) { if (!dir.query_exists ()) try { dir.make_directory_with_parents (); return true; } catch { error ("Could not access or create the directory '%s'.", dir.get_path ()); } return false; } } } granite-0.3.0/lib/Services/SimpleCommand.vala000644 001750 001750 00000011223 12340443640 022574 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Lucas Baudin This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ /** * This class is a wrapper to run an async command. It provides useful signals. */ public class Granite.Services.SimpleCommand : GLib.Object { /** * Emitted when the command is finished. */ public signal void done(int exit); /** * When the output changed (std.out and std.err). * * @param text the new text */ public signal void output_changed(string text); /** * When the standard output is changed. * * @param text the new text from std.out */ public signal void standard_changed(string text); /** * When the error output is changed. * * @param text the new text from std.err */ public signal void error_changed(string text); /** * The whole current standard output */ public string standard_output_str = ""; /** * The whole current error output */ public string error_output_str = ""; /** * The whole current output */ public string output_str = ""; GLib.IOChannel out_make; GLib.IOChannel error_out; string dir; string command; Pid pid; /** * Create a new object. You will have to call run() when you want to run the command. * * @param dir The working dir * @param command The command to execute (using absolute paths like /usr/bin/make causes less * strange bugs). * */ public SimpleCommand(string dir, string command) { this.dir = dir; this.command = command; } /** * Launch the command. It is async. */ public void run() { int standard_output = 0; int standard_error = 0; try { Process.spawn_async_with_pipes(dir, command.split(" "), null, SpawnFlags.DO_NOT_REAP_CHILD, null, out pid, null, out standard_output, out standard_error); } catch(Error e) { critical("Couldn't launch command %s in the directory %s: %s", command, dir, e.message); } ChildWatch.add(pid, (pid, exit) => { done(exit); }); out_make = new GLib.IOChannel.unix_new(standard_output); out_make.add_watch(IOCondition.IN | IOCondition.HUP, (source, condition) => { if(condition == IOCondition.HUP) { return false; } string output = null; try { out_make.read_line(out output, null, null); } catch(Error e) { critical("Error in the output retrieving of %s: %s", command, e.message); } standard_output_str += output; output_str += output; standard_changed(output); output_changed(output); return true; }); error_out = new GLib.IOChannel.unix_new(standard_error); error_out.add_watch(IOCondition.IN | IOCondition.HUP, (source, condition) => { if(condition == IOCondition.HUP) { return false; } string output = null; try { error_out.read_line(out output, null, null); } catch(Error e) { critical("Error in the output retrieving of %s: %s", command, e.message); } error_output_str += output; output_str += output; error_changed(output); output_changed(output); return true; }); } } granite-0.3.0/lib/Services/ContractorProxy.vala000644 001750 001750 00000031276 12340443640 023236 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Lucas Baudin , Akshay Shekher , Victor Martinez This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Services { /** * Interface for executing and accessing properties of Contractor actions */ public interface Contract : Object { /** * Returns the display name of the contract, already internationalized * * @return The internationalized value of the 'Name' key in the .contract file. * As of 2014, Contractor uses gettext to handle internationalization. */ public abstract string get_display_name (); /** * Returns the description of the contract, already internationalized * * @return The internationalized value of the 'Description' key in the .contract file. * As of 2014, Contractor uses gettext to handle internationalization. */ public abstract string get_description (); /** * Returns an icon for this contract * * @return {@link Glib.Icon} based on the 'Icon' key in the .contract file. */ public abstract Icon get_icon (); /** * Executes the action on the given file */ public abstract void execute_with_file (File file) throws Error; /** * Executes the action on the given list of files */ public abstract void execute_with_files (File[] files) throws Error; } /** * thrown by {@link Granite.Services.ContractorProxy} */ public errordomain ContractorError { /** * Usually means that Contractor is not installed or not configured properly * * Contractor is not a compile-time dependency, so it is possible to * install an application that uses it without installing Contractor. * * Upon receiving this error the application should disable its Contractor-related * functionality, which typically means hiding the relevant UI elements. */ SERVICE_NOT_AVAILABLE } internal struct ContractData { string id; string display_name; string description; string icon; } [DBus (name = "org.elementary.Contractor")] internal interface ContractorDBusAPI : Object { public signal void contracts_changed (); public abstract ContractData[] list_all_contracts () throws Error; public abstract ContractData[] get_contracts_by_mime (string mime_type) throws Error; public abstract ContractData[] get_contracts_by_mimelist (string[] mime_types) throws Error; public abstract void execute_with_uri (string id, string uri) throws Error; public abstract void execute_with_uri_list (string id, string[] uri) throws Error; } /** * Provides a convenient GObject wrapper around Contractor's D-bus API */ public class ContractorProxy : Object { private class GenericContract : Object, Contract { public string id { get; private set; } private string display_name; private string description; private string icon_key; private Icon icon; public GenericContract (ContractData data) { icon_key = ""; update_data (data); } public void update_data (ContractData data) { id = data.id ?? ""; display_name = data.display_name ?? ""; description = data.description ?? ""; if (icon_key != data.icon) { icon_key = data.icon ?? ""; icon = null; } } public string get_display_name () { return display_name; } public string get_description () { return description; } public Icon get_icon () { if (icon == null) { if (Path.is_absolute (icon_key)) icon = new FileIcon (File.new_for_path (icon_key)); else icon = new ThemedIcon.with_default_fallbacks (icon_key); } return icon; } public void execute_with_file (File file) throws Error { ContractorProxy.execute_with_uri (id, file.get_uri ()); } public void execute_with_files (File[] files) throws Error { string[] uris = new string[0]; foreach (var file in files) uris += file.get_uri (); ContractorProxy.execute_with_uri_list (id, uris); } } /** * Emitted when the list of actions available to Contractor changes. * Application should generally request the updated list of actions upon receiving this signal. * * This is not obligatory for frequently updated lists (e.g. in context menus), * but essential for applications that display action lists without re-requesting them. */ public signal void contracts_changed (); private static ContractorDBusAPI contractor_dbus; private static Gee.HashMap contracts; private static ContractorProxy instance; private ContractorProxy () throws Error { ensure (); } public static ContractorProxy get_instance () throws Error { if (instance == null) instance = new ContractorProxy (); return instance; } private static void ensure () throws Error { if (contractor_dbus == null) { try { contractor_dbus = Bus.get_proxy_sync (BusType.SESSION, "org.elementary.Contractor", "/org/elementary/contractor"); contractor_dbus.contracts_changed.connect (on_contracts_changed); } catch (IOError e) { throw new ContractorError.SERVICE_NOT_AVAILABLE (e.message); } } if (contracts == null) contracts = new Gee.HashMap (); } private static void on_contracts_changed () { try { var all_contracts = get_all_contracts (); var to_remove = new Gee.LinkedList (); // Remove contracts no longer present in the system. // get_all_contracts already provided references to the contracts // that have not been removed, so those are kept. foreach (var contract in contracts.values) { if (!all_contracts.contains (contract)) to_remove.add (contract); } foreach (var contract in to_remove) contracts.unset (contract.id); int diff = contracts.size - all_contracts.size; if (diff < 0) critical ("Failed to add %d contracts.", diff); else if (diff > 0) critical ("Failed to remove %d contracts.", diff); if (instance != null) instance.contracts_changed (); } catch (Error err) { warning ("Could not process changes in contracts: %s", err.message); } } private static void execute_with_uri (string id, string uri) throws Error { ensure (); contractor_dbus.execute_with_uri (id, uri); } private static void execute_with_uri_list (string id, string[] uris) throws Error { ensure (); contractor_dbus.execute_with_uri_list (id, uris); } /** * Provides all the contracts. * * @return {@link Gee.List} containing all the contracts available in the system. */ public static Gee.List get_all_contracts () throws Error { ensure (); var data = contractor_dbus.list_all_contracts (); return get_contracts_from_data (data); } /** * Returns actions (contracts) applicable to the given mimetypes. * * @param mime_type Mimetype of file. * @return {@link Gee.List} of contracts that support the given mimetype. */ public static Gee.List get_contracts_by_mime (string mime_type) throws Error { ensure (); var data = contractor_dbus.get_contracts_by_mime (mime_type); return get_contracts_from_data (data); } /** * Returns actions (contracts) applicable to all given mimetypes. * * Only the contracts that support all of the mimetypes are returned. * * @param mime_types Array of mimetypes. * @return {@link Gee.List} of contracts that support the given mimetypes. */ public static Gee.List get_contracts_by_mimelist (string[] mime_types) throws Error { ensure (); var data = contractor_dbus.get_contracts_by_mimelist (mime_types); return get_contracts_from_data (data); } /** * Returns actions (contracts) applicable to the given file. * * Errors occurring in {@link GLib.File.query_info} method while looking up * the file (e.g. if the file is deleted) are forwarded to the caller. * * @param file An existing file. * @return {@link Gee.List} of contracts applicable to the given file. */ public static Gee.List get_contracts_for_file (File file) throws Error { File[] files = { file }; return get_contracts_for_files (files); } /** * Returns actions (contracts) applicable to all given files. * * Only the contracts that support all of the files are returned.<
> * Errors occurring in {@link GLib.File.query_info} method while looking up * the file (e.g. if the file is deleted) are forwarded to the caller.<
> * * @param files Array of existing files. * @return {@link Gee.List} of contracts applicable to any of the given files. */ public static Gee.List get_contracts_for_files (File[] files) throws Error { var mime_types = new Gee.HashSet (); //for automatic deduplication foreach (var file in files) { var content_type = file.query_info (FileAttribute.STANDARD_CONTENT_TYPE, FileQueryInfoFlags.NONE).get_content_type (); mime_types.add (ContentType.get_mime_type (content_type)); } return get_contracts_by_mimelist (mime_types.to_array ()); } private static Gee.List get_contracts_from_data (ContractData[] data) { var contract_list = new Gee.LinkedList (); if (data != null) { foreach (var contract_data in data) { string contract_id = contract_data.id; // See if we have a contract already. Otherwise create a new one. // We do this in order to be able to compare contracts by reference // from client code. var contract = contracts.get (contract_id); if (contract == null) { contract = new GenericContract (contract_data); contracts.set (contract_id, contract); } else { contract.update_data (contract_data); } contract_list.add (contract); } } return contract_list; } } } granite-0.3.0/lib/granite.pc.cmake000644 001750 001750 00000000572 12340443640 020455 0ustar00shnatselshnatsel000000 000000 prefix=@PREFIX@ exec_prefix=@DOLLAR@{prefix} libdir=@DOLLAR@{prefix}/lib includedir=@DOLLAR@{prefix}/include Name: granite Description: elementary's Application Framework Version: @PKG_VERSION@ Libs: -L@DOLLAR@{libdir} -l@PKG_NAME@ Cflags: -I@DOLLAR@{includedir}/@PKG_NAME@ Requires: cairo gee-0.8 glib-2.0 gio-unix-2.0 gobject-2.0 gthread-2.0 gdk-3.0 gdk-pixbuf-2.0 gtk+-3.0 granite-0.3.0/lib/style-classes.vala000644 001750 001750 00000003232 12340443640 021055 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2012-2013 Granite Developers This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.StyleClass { public const string CATEGORY_EXPANDER = "category-expander"; public const string COMPOSITED = "composited"; public const string BADGE = "badge"; public const string CONTENT_VIEW = "content-view"; public const string CONTENT_VIEW_WINDOW = "content-view-window"; public const string DECORATED_WINDOW = "decorated-window"; public const string SOURCE_LIST = "source-list"; public const string POPOVER = "popover"; public const string POPOVER_BG = "popover_bg"; public const string HELP_BUTTON = "help_button"; public const string THIN_PANE_SEPARATOR = "sidebar-pane-separator"; public const string OVERLAY_BAR = "overlay-bar"; public const string TITLE_TEXT = "title"; public const string H1_TEXT = "h1"; public const string H2_TEXT = "h2"; public const string H3_TEXT = "h3"; } granite-0.3.0/lib/Widgets/Utils.vala000644 001750 001750 00000024214 12340443640 020773 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2012-2013 Granite Developers This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ public enum Granite.TextStyle { /** * Highest level header */ TITLE, /** * Second highest header */ H1, /** * Third highest header */ H2, /** * Fourth Highest Header */ H3; /** * Gets style sheet of text style * * @return CSS of text style */ public string get_stylesheet (out string style_class = null) { switch (this) { case TITLE: style_class = StyleClass.TITLE_TEXT; return @".$style_class { font: raleway 36; }"; case H1: style_class = StyleClass.H1_TEXT; return @".$style_class { font: open sans bold 24; }"; case H2: style_class = StyleClass.H2_TEXT; return @".$style_class { font: open sans light 18; }"; case H3: style_class = StyleClass.H3_TEXT; return @".$style_class { font: open sans bold 12; }"; default: assert_not_reached (); } } } public enum Granite.CloseButtonPosition { LEFT, RIGHT } namespace Granite.DateTime { public static string get_default_time_format (bool is_12h = false, bool with_second = false) { if (is_12h == true) { if (with_second == true) { /// TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds return _("%l:%M:%S %p"); } else { /// TRANSLATORS: a GLib.DateTime format showing the hour (12h format) return _("%l:%M %p"); } } else { if (with_second == true) { /// TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds return _("%H:%M:%S"); } else { /// TRANSLATORS: a GLib.DateTime format showing the hour (24h format) return _("%H:%M"); } } } private static bool is_clock_format_12h () { var h24_settings = new Settings ("org.gnome.desktop.interface"); var format = h24_settings.get_string ("clock-format"); return (format.contains ("12h")); } public static string get_default_date_format (bool with_weekday = false, bool with_day = true, bool with_year = false) { if (with_weekday == true && with_day == true && with_year == true) { /// TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year return _("%a %b %e %Y"); } else if (with_weekday == false && with_day == true && with_year == true) { /// TRANSLATORS: a GLib.DateTime format showing the date and year return _("%b %e %Y"); } else if (with_weekday == false && with_day == false && with_year == true) { /// TRANSLATORS: a GLib.DateTime format showing the year return _("%Y"); } else if (with_weekday == false && with_day == true && with_year == false) { /// TRANSLATORS: a GLib.DateTime format showing the date return _("%b %e"); } else if (with_weekday == true && with_day == false && with_year == true) { /// TRANSLATORS: a GLib.DateTime format showing the weekday and year. return _("%a %Y"); } else if (with_weekday == true && with_day == false && with_year == false) { /// TRANSLATORS: a GLib.DateTime format showing the weekday return _("%a"); } else if (with_weekday == true && with_day == true && with_year == false) { /// TRANSLATORS: a GLib.DateTime format showing the weekday and date return _("%a %b %e"); } else if (with_weekday == false && with_day == false && with_year == false) { /// TRANSLATORS: a GLib.DateTime format showing the month. return _("%b"); } return ""; } } /** * This class helps to apply CSS to widgets. */ namespace Granite.Widgets.Utils { [CCode (cname="get_close_pixbuf")] public extern Gdk.Pixbuf get_close_pixbuf (); /** * Applies the stylesheet to the widget * * @param widget widget to apply style to * @param stylesheet style to apply to screen * @param class_name class name to add style to * @param priority priorty of change */ public Gtk.CssProvider? set_theming (Gtk.Widget widget, string stylesheet, string? class_name, int priority) { var css_provider = get_css_provider (stylesheet); var context = widget.get_style_context (); if (css_provider != null) context.add_provider (css_provider, priority); if (class_name != null && class_name.strip () != "") context.add_class (class_name); return css_provider; } /** * Applies a stylesheet to the given screen. This will affects all the * widgets which are part of that screen. * * @param screen Screen to apply style to * @param stylesheet style to apply to screen * @param priority priorty of change */ public Gtk.CssProvider? set_theming_for_screen (Gdk.Screen screen, string stylesheet, int priority) { var css_provider = get_css_provider (stylesheet); if (css_provider != null) Gtk.StyleContext.add_provider_for_screen (screen, css_provider, priority); return css_provider; } /** * @return a new {@link Gtk.CssProvider}, or null in case the parsing of * //stylesheet// failed. */ public Gtk.CssProvider? get_css_provider (string stylesheet) { Gtk.CssProvider provider = new Gtk.CssProvider (); try { provider.load_from_data (stylesheet, -1); } catch (Error e) { warning ("Could not create CSS Provider: %s\nStylesheet:\n%s", e.message, stylesheet); return null; } return provider; } internal bool is_left_to_right (Gtk.Widget widget) { var dir = widget.get_direction (); if (dir == Gtk.TextDirection.NONE) dir = Gtk.Widget.get_default_direction (); return dir == Gtk.TextDirection.LTR; } /** * This method applies given text style to given label * * @param text_style text style to apply * @param label label to apply style to */ public void apply_text_style_to_label (TextStyle text_style, Gtk.Label label) { var style_provider = new Gtk.CssProvider (); var style_context = label.get_style_context (); string style_class, stylesheet; stylesheet = text_style.get_stylesheet (out style_class); style_context.add_class (style_class); try { style_provider.load_from_data (stylesheet, -1); } catch (Error err) { warning ("Couldn't apply style to label: %s", err.message); return; } style_context.add_provider (style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); } const string WM_SETTINGS_PATH = "org.gnome.desktop.wm.preferences"; const string PANTHEON_SETTINGS_PATH = "org.pantheon.desktop.gala.appearance"; const string WM_BUTTON_LAYOUT_KEY = "button-layout"; /** * This method detects the close button position as configured for the window manager. If you * need to know when this key changed, it's best to listen on the schema returned by * {@link Granite.Widgets.Utils.get_button_layout_schema} for changes and then call this method again. * * @param position a {@link Granite.CloseButtonPosition} indicating where to best put the close button * @return if no schema was detected by {@link Granite.Widgets.Utils.get_button_layout_schema} * or there was no close value in the button-layout string, false will be returned. The position * will be LEFT in that case. */ public bool get_default_close_button_position (out CloseButtonPosition position) { // default value position = CloseButtonPosition.LEFT; var schema = get_button_layout_schema (); if (schema == null) { return false; } var layout = new Settings (schema).get_string (WM_BUTTON_LAYOUT_KEY); var parts = layout.split (":"); if (parts.length < 2) { return false; } if ("close" in parts[0]) { position = CloseButtonPosition.LEFT; return true; } else if ("close" in parts[1]) { position = CloseButtonPosition.RIGHT; return true; } return false; } /** * This methods returns the schema used by {@link Granite.Widgets.Utils.get_default_close_button_position} * to determine the close button placement. It will first check for the pantheon/gala schema and then fallback * to the default gnome one. If neither is available, NULL is returned. Make sure to check for this case, * as otherwise your program may crash on startup. * * @return the schema name */ public string? get_button_layout_schema () { var schemas = GLib.Settings.list_schemas (); if (PANTHEON_SETTINGS_PATH in schemas) return PANTHEON_SETTINGS_PATH; else if (WM_SETTINGS_PATH in schemas) return WM_SETTINGS_PATH; warning ("No schema indicating the button-layout is installed."); return null; } }granite-0.3.0/lib/Widgets/AboutDialog.vala000644 001750 001750 00000015610 12340443640 022065 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Adrien Plazas This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Gtk; namespace Granite.Widgets { /** * This class makes an about dialog which goes in the App Menu on most apps. * * {{../../doc/images/AboutDialog.png}} */ public class AboutDialog : Granite.GtkPatch.AboutDialog { /** * The URL for the link to the website of the program. */ public string help { set { _help = value; help_button.sensitive = !(_help == null || _help == ""); } get { return _help; } } string _help = ""; /** * The URL for the link to the website of the program. */ public string translate { set { _translate = value; translate_button.sensitive = !(_translate == null || _translate == ""); } get { return _translate; } } string _translate = ""; /** * The URL for the link to the website of the program. */ public string bug { set { _bug = value; bug_button.sensitive = !(_bug == null || _bug == ""); } get { return _bug; } } string _bug = ""; private Button help_button; private Button translate_button; private Button bug_button; private Granite.Drawing.BufferSurface buffer; private const string HELP_BUTTON_STYLESHEET = """ .help_button { border-radius: 200px; } """; int shadow_blur = 15; int shadow_x = 0; int shadow_y = 2; double shadow_alpha = 0.3; /** * Creates a new Granite.Widgets.AboutDialog */ public AboutDialog () { Box action_area = (Box) get_action_area (); var draw_ref = new Gtk.Window (); draw_ref.get_style_context ().add_class (StyleClass.CONTENT_VIEW_WINDOW); // Apply DecoratedWindow's theming DecoratedWindow.set_default_theming (draw_ref); action_area.get_style_context ().add_class (StyleClass.CONTENT_VIEW); this.decorated = false; this.set_visual (this.get_screen ().get_rgba_visual ()); this.app_paintable = true; action_area.margin = 4; action_area.margin_bottom = 8; this.get_content_area ().margin = 10; this.get_content_area ().margin_top = 27; this.get_content_area ().margin_bottom = 3; /* help button */ help_button = new Button.with_label ("?"); Utils.set_theming (help_button, HELP_BUTTON_STYLESHEET, StyleClass.HELP_BUTTON, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); help_button.halign = Gtk.Align.CENTER; help_button.clicked.connect (() => { activate_link(help); }); /* Circular help button */ help_button.size_allocate.connect ( (alloc) => { help_button.set_size_request (alloc.height, -1); }); action_area.pack_end (help_button, false, false, 0); ((Gtk.ButtonBox) action_area).set_child_secondary (help_button, true); ((Gtk.ButtonBox) action_area).set_child_non_homogeneous (help_button, true); /* translate button */ translate_button = new Button.with_label(_("Translate This App")); translate_button.clicked.connect ( () => { activate_link(translate); }); action_area.pack_start (translate_button, false, false, 0); /* bug button */ bug_button = new Button.with_label (_("Report a Problem")); bug_button.clicked.connect (() => { try { GLib.Process.spawn_command_line_async ("apport-bug %i".printf (Posix.getpid ())); } catch (Error e) { warning ("Could Not Launch 'apport-bug'."); activate_link (bug); } }); action_area.pack_start (bug_button, false, false, 0); action_area.reorder_child (bug_button, 0); action_area.reorder_child (translate_button, 0); this.height_request = 282; var w = -1; var h = -1; this.size_allocate.connect ( () => { if (this.get_allocated_width () == w && this.get_allocated_height () == h) return; w = this.get_allocated_width (); h = this.get_allocated_height (); this.buffer = new Granite.Drawing.BufferSurface (w, h); this.buffer.context.rectangle (shadow_blur + shadow_x, shadow_blur + shadow_y, w - shadow_blur*2 + shadow_x, h - shadow_blur*2 + shadow_y); this.buffer.context.set_source_rgba (0, 0, 0, shadow_alpha); this.buffer.context.fill (); this.buffer.exponential_blur (shadow_blur / 2); draw_ref.get_style_context ().render_activity (this.buffer.context, shadow_blur + shadow_x, shadow_blur + shadow_y, w - shadow_blur*2 + shadow_x, h - shadow_blur*2 + shadow_y); }); /*draw the buffer*/ this.draw.connect ( (ctx) => { if (buffer == null) return false; ctx.set_operator (Cairo.Operator.SOURCE); ctx.rectangle (0, 0, w, h); ctx.set_source_rgba (0, 0, 0, 0); ctx.fill (); ctx.set_source_surface (this.buffer.surface, 0, 0); ctx.paint (); return false; }); /*allow moving the window*/ this.button_press_event.connect ( (e) => { if (e.button == 1) { this.begin_move_drag ((int) e.button, (int) e.x_root, (int) e.y_root, e.time); return true; } return false; }); show_all (); } } public extern void show_about_dialog (Gtk.Window *parent, ...); } granite-0.3.0/lib/Widgets/DatePicker.vala000644 001750 001750 00000011104 12340443640 021700 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Maxwell Barvian This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Gtk; using Gdk; namespace Granite.Widgets { /** * This class allows users to pick dates from a calendar. */ public class DatePicker : Gtk.Entry, Gtk.Buildable { const int OFFSET = 15; const int MARGIN = 6; /** * Desired format of DatePicker */ public string format { get; construct; } /** * Dropdown of DatePicker */ protected Gtk.EventBox dropdown; /** * The Calendar to create the DatePicker */ protected Calendar calendar; private Gtk.Popover popover; private GLib.DateTime _date; private bool proc_next_day_selected = true; /** * Current Date */ public GLib.DateTime date { get { return _date; } set { _date = value; text = _date.format (format); } } /** * Makes new DatePicker */ construct { if (format == null) format = Granite.DateTime.get_default_date_format (false, true, true); dropdown = new Gtk.EventBox (); dropdown.margin = MARGIN; popover = new Gtk.Popover (this); popover.add (dropdown); calendar = new Calendar (); date = new GLib.DateTime.now_local (); // Entry properties can_focus = false; editable = false; // user can't edit the entry directly secondary_icon_gicon = new ThemedIcon.with_default_fallbacks ("office-calendar-symbolic"); dropdown.add_events (EventMask.FOCUS_CHANGE_MASK); dropdown.add (calendar); // Signals and callbacks icon_release.connect (on_icon_press); calendar.day_selected.connect (on_calendar_day_selected); /* * A next/prev month/year event * also triggers a day selected event, * so stop the next day selected event * from setting the date and closing * the calendar. */ calendar.next_month.connect (() => { proc_next_day_selected = false; }); calendar.next_year.connect (() => { proc_next_day_selected = false; }); calendar.prev_month.connect (() => { proc_next_day_selected = false; }); calendar.prev_year.connect (() => { proc_next_day_selected = false; }); } /** * Makes a new DatePicker * * @param format desired format of new DatePicker */ public DatePicker.with_format (string format) { Object (format: format); } private void on_icon_press (EntryIconPosition position) { Gdk.Rectangle rect = Gdk.Rectangle (); position_dropdown (out rect); popover.pointing_to = rect; popover.position = Gtk.PositionType.BOTTOM; popover.show_all (); calendar.grab_focus (); } protected virtual void position_dropdown (out Gdk.Rectangle rect) { Gtk.Allocation size; get_allocation (out size); rect.x = size.width - OFFSET; rect.y = size.height; } private void on_calendar_day_selected () { if (proc_next_day_selected) { date = new GLib.DateTime.local (calendar.year, calendar.month + 1, calendar.day, 0, 0, 0); hide_dropdown (); } else { proc_next_day_selected = true; } } private void hide_dropdown () { popover.hide (); } } }granite-0.3.0/lib/Widgets/CollapsiblePaned.vala000644 001750 001750 00000007101 12340443640 023070 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Mathijs Henquet This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ public enum Granite.CollapseMode { NONE = 0, LEFT = 1, TOP = 1, FIRST = 1, RIGHT = 2, BOTTOM = 2, LAST = 2 } namespace Granite.Widgets { /** * A paned that can be easily collapsed by double-clicking over the pane separator. * If it was previously collapsed, it is expanded, and vice-versa. */ public class CollapsiblePaned : Gtk.Paned { public CollapseMode collapse_mode { get; set; default = CollapseMode.NONE; } //public signal void shrink(); //TODO: Make the default action overwritable //public new signal void expand(int saved_state); //TODO same private int saved_state = 10; private uint last_click_time = 0; public CollapsiblePaned (Gtk.Orientation orientation) { this.orientation = orientation; button_press_event.connect (detect_toggle); } private bool detect_toggle (Gdk.EventButton event) { if (collapse_mode == CollapseMode.NONE) return false; if (event.time < (last_click_time + Gtk.Settings.get_default ().gtk_double_click_time) && event.type != Gdk.EventType.2BUTTON_PRESS) return true; if (event.type == Gdk.EventType.2BUTTON_PRESS && event.window == get_handle_window ()) { accept_position (); var current_position = get_position (); if (collapse_mode == CollapseMode.LAST) current_position = (max_position - current_position); // change current_position to be relative int requested_position; if (current_position == 0) { debug ("[CollapsablePaned] expand"); requested_position = saved_state; } else { saved_state = current_position; debug ("[CollapsablePaned] shrink"); requested_position = 0; } if (collapse_mode == CollapseMode.LAST) requested_position = max_position - requested_position; // change requested_position back to be non-relative set_position (requested_position); return true; } last_click_time = event.time; return false; } } [Deprecated (replacement = "Granite.Widgets.CollapsiblePaned", since = "granite-0.2")] public class HCollapsablePaned : CollapsiblePaned { public HCollapsablePaned () { base (Gtk.Orientation.HORIZONTAL); } } [Deprecated (replacement = "Granite.Widgets.CollapsiblePaned", since = "granite-0.2")] public class VCollapsablePaned : CollapsiblePaned { public VCollapsablePaned () { base (Gtk.Orientation.VERTICAL); } } } granite-0.3.0/lib/Widgets/widgets-utils.h000644 001750 001750 00000000346 12340443640 022003 0ustar00shnatselshnatsel000000 000000 #include #include void granite_widgets_show_about_dialog (GtkWindow *parent, const gchar *first_property_name, ...); granite-0.3.0/lib/Widgets/Entries.vala000644 001750 001750 00000012356 12340443640 021310 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Avi Romanoff , Allen Lowe , Maxwell Barvian , Julien Spautz This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Widgets { /** * A text entry space with hint and clear icon */ [Deprecated (since = "0.3", replacement = "Gtk.Entry.placeholder_text")] public class HintedEntry : Gtk.Entry { public bool has_clear_icon { get; set; default = false; } public string hint_string { get { return placeholder_text; } set { placeholder_text = value; } } /** * Makes new hinted entry * * @param hint_string hint for new entry */ public HintedEntry (string hint_string) { this.hint_string = hint_string; this.icon_release.connect ((pos) => { if (pos == Gtk.EntryIconPosition.SECONDARY) text = ""; }); this.changed.connect (manage_icon); this.notify["has-clear-icon"].connect (manage_icon); } private void manage_icon () { if (has_clear_icon && text != "") set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, "edit-clear-symbolic"); else set_icon_from_icon_name (Gtk.EntryIconPosition.SECONDARY, null); } /* * These 4 functions must be removed, they are only kept here * for API compatibility. */ [Deprecated (since = "0.2")] protected void hint () { } [Deprecated (since = "0.2")] protected void unhint () { } [Deprecated (since = "0.2", replacement = "Gtk.Entry.get_text")] public new string get_text () { return text; } [Deprecated (since = "0.2", replacement = "Gtk.Entry.set_text")] public new void set_text (string text) { this.text = text; } } /** * A searchbar with hint-text. */ [Deprecated (since = "0.3", replacement = "Gtk.SearchEntry")] public class SearchBar : HintedEntry { private uint timeout_id = 0; /** * This value handles how much time (in ms) should pass * after the user stops typing. By default it is set * to 300 ms. */ public int pause_delay { get; set; default = 300; } /** * text_changed () signal is emitted after a short delay, * which depends on pause_delay. * If you need a synchronous signal without any delay, * use changed () method. */ public signal void text_changed_pause (string text); /** * search_icon_release () signal is emitted after releasing the mouse button, * which depends on the SearchBar's icon. * It can be useful to show something on the icon press, * we can show a PopOver, for example. */ public signal void search_icon_release (); /** * Makes new search bar * * @param hint_string hint for new search bar */ public SearchBar (string hint_string) { base (hint_string); has_clear_icon = true; set_icon_from_gicon (Gtk.EntryIconPosition.PRIMARY, new ThemedIcon.with_default_fallbacks ("edit-find-symbolic")); // Signals and callbacks changed.connect_after (on_changed); icon_release.connect (on_icon_release); /* Pressing Escape should clear text */ key_press_event.connect ((e) => { switch (e.keyval) { case Gdk.Key.Escape: text = ""; return true; } return false; }); } private void on_icon_release (Gtk.EntryIconPosition position) { if (position == Gtk.EntryIconPosition.PRIMARY) search_icon_release (); // emit signal } private void on_changed () { if (timeout_id > 0) Source.remove (timeout_id); timeout_id = Timeout.add (pause_delay, emit_text_changed); } private bool emit_text_changed () { var terms = get_text (); text_changed_pause (terms); // Emit signal return Source.remove (timeout_id); } } } granite-0.3.0/lib/Widgets/ToolButtonWithMenu.vala000644 001750 001750 00000026500 12340443640 023465 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Mathijs Henquet This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Authors: Mathijs Henquet , ammonkey ***/ /* * ToolButtonWithMenu * - support long click / right click with depressed button states * - activate a GtkAction if any or popup a menu. * (used in history navigation buttons next/prev, appmenu) * */ using Gdk; using Gtk; namespace Granite.Widgets { /** * ToolButtonWithMenu * - support long click / right click with depressed button states * - activate a GtkAction if any or popup a menu * (used in history navigation buttons and the AppMenu) */ [Deprecated (replacement = "Gtk.MenuButton", since = "0.3")] public class ToolButtonWithMenu : Gtk.ToggleToolButton { public signal void right_click (Gdk.EventButton ev); /** * VMenuPosition: */ public enum VMenuPosition { /** * TOP: Align the menu at top of button position. */ TOP, /** * TOP: Align the menu at top of button position. */ BOTTOM } /** * HMenuPosition: */ public enum HMenuPosition { /** * LEFT: Left-align the menu relative to the button's position. */ LEFT, /** * CENTER: Center-align the menu relative to the button's position. */ CENTER, /** * RIGHT: Right-align the menu relative to the button's position. */ RIGHT, /** * INSIDE_WINDOW: Keep the menu inside the GtkWindow. Center-align when possible. */ INSIDE_WINDOW // center by default but move it the menu goes out of the window } public HMenuPosition horizontal_menu_position { get; set; default = HMenuPosition.CENTER; } public VMenuPosition vertical_menu_position { get; set; default = VMenuPosition.BOTTOM; } public Gtk.Action? myaction; public ulong toggled_sig_id; /** * Delegate function used to populate menu */ public delegate Gtk.Menu MenuFetcher (); public MenuFetcher fetcher { set { _fetcher = value; has_fetcher = true; } get { return _fetcher; } } public Gtk.Menu menu { get { return _menu; } set { if (has_fetcher) { warning ("Don't set the menu property on a ToolMenuButton when there is already a menu fetcher"); } else { _menu = value; update_menu_properties (); } } } private int LONG_PRESS_TIME = Gtk.Settings.get_default ().gtk_double_click_time * 2; private int timeout = -1; private uint last_click_time = -1; private bool has_fetcher = false; private unowned MenuFetcher _fetcher; private Gtk.Menu _menu; private Gtk.Button button; public ToolButtonWithMenu.from_action (Gtk.Action action) { this.from_stock (action.stock_id, IconSize.MENU, action.label, new Gtk.Menu ()); use_action_appearance = true; set_related_action (action); action.connect_proxy (this); myaction = action; } public ToolButtonWithMenu.from_stock (string stock_image, IconSize size, string label, Gtk.Menu menu) { Image image = new Image.from_stock (stock_image, size); this (image, label, menu); } private void update_menu_properties () { menu.attach_to_widget (this, null); menu.deactivate.connect ( () => { deactivate_menu (); }); menu.deactivate.connect (popdown_menu); } public ToolButtonWithMenu (Image image, string label, Gtk.Menu menu) { icon_widget = image; label_widget = new Gtk.Label (label); (label_widget as Gtk.Label).use_underline = true; can_focus = true; set_tooltip_text (label); this.menu = menu; mnemonic_activate.connect (on_mnemonic_activate); button = get_child () as Gtk.Button; button.events |= EventMask.BUTTON_PRESS_MASK | EventMask.BUTTON_RELEASE_MASK; button.button_press_event.connect (on_button_press_event); button.button_release_event.connect (on_button_release_event); } public override void show_all () { menu.show_all (); base.show_all (); } private void deactivate_menu () { if (myaction != null) myaction.block_activate (); active = false; if (myaction != null) myaction.unblock_activate (); } private void popup_menu_and_depress_button (Gdk.EventButton ev) { if (myaction != null) myaction.block_activate (); active = true; if (myaction != null) myaction.unblock_activate (); popup_menu (ev); } private bool on_button_release_event (Gdk.EventButton ev) { if (ev.time - last_click_time < LONG_PRESS_TIME) { if (myaction != null) { myaction.activate (); } else { active = true; popup_menu (ev); } } if (timeout != -1) { Source.remove ((uint) timeout); timeout = -1; } return true; } private bool on_button_press_event (Gdk.EventButton ev) { // If the button is kept pressed, don't make the user wait when there's no action int max_press_time = (myaction != null)? LONG_PRESS_TIME : 0; if (timeout == -1 && ev.button == 1) { last_click_time = ev.time; timeout = (int) Timeout.add(max_press_time, () => { // long click timeout = -1; popup_menu_and_depress_button (ev); return false; }); } if (ev.button == 3) { // right_click right_click (ev); if (myaction != null) popup_menu_and_depress_button (ev); } return true; } private bool on_mnemonic_activate (bool group_cycling) { // ToggleButton always grabs focus away from the editor, // so reimplement Widget's version, which only grabs the // focus if we are group cycling. if (!group_cycling) { activate (); } else if (can_focus) { grab_focus (); } return true; } protected new void popup_menu (Gdk.EventButton? ev = null) { if (has_fetcher) fetch_menu (); try { menu.popup (null, null, get_menu_position, (ev == null) ? 0 : ev.button, (ev == null) ? get_current_event_time () : ev.time); } finally { // Highlight the parent if (menu.attach_widget != null) menu.attach_widget.set_state_flags (StateFlags.SELECTED, true); menu.select_first (false); } } protected void popdown_menu () { menu.popdown (); // Unhighlight the parent if (menu.attach_widget != null) menu.attach_widget.set_state_flags (StateFlags.NORMAL, true); } private void fetch_menu () { _menu = fetcher (); update_menu_properties (); } private void get_menu_position (Gtk.Menu menu, out int x, out int y, out bool push_in) { Allocation menu_allocation; menu.get_allocation (out menu_allocation); if (menu.attach_widget == null || menu.attach_widget.get_window () == null) { // Prevent null exception in weird cases x = 0; y = 0; push_in = true; return; } menu.attach_widget.get_window ().get_origin (out x, out y); Allocation allocation; menu.attach_widget.get_allocation (out allocation); /* Left, right or center??*/ if (horizontal_menu_position == HMenuPosition.RIGHT) { x += allocation.x; } else if (horizontal_menu_position == HMenuPosition.CENTER) { x += allocation.x; x -= menu_allocation.width / 2; x += allocation.width / 2; } else { x += allocation.x; x -= menu_allocation.width; x += this.get_allocated_width(); } /* Bottom or top?*/ if (vertical_menu_position == VMenuPosition.TOP) { y -= menu_allocation.height; y -= this.get_allocated_height (); } int width, height; menu.get_size_request (out width, out height); if (horizontal_menu_position == HMenuPosition.INSIDE_WINDOW) { /* Get window geometry */ var parent_widget = get_toplevel (); Gtk.Allocation window_allocation; parent_widget.get_allocation (out window_allocation); parent_widget.get_window ().get_origin (out x, out y); int parent_window_x0 = x; int parent_window_xf = parent_window_x0 + window_allocation.width; // Now check if the menu is outside the window and un-center it // if that's the case if (x + menu_allocation.width > parent_window_xf) x = parent_window_xf - menu_allocation.width; // Move to left if (x < parent_window_x0) x = parent_window_x0; // Move to right } y += allocation.y; if (y + height >= menu.attach_widget.get_screen ().get_height ()) y -= height; else y += allocation.height; push_in = true; } } } granite-0.3.0/lib/Widgets/WrapLabel.vala000644 001750 001750 00000004264 12340443640 021547 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2010 troorl Copyright (C) 2011 ammonkey Copyright (C) 2012-2013 Granite Developers This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Gtk; /* Label with NORMAL wrapping. Thanks to VMWare team. */ /** * This is a label which is automatically wrapped. * If a line is too long, there will be a line break for instance. */ public class Granite.Widgets.WrapLabel : Label { public int m_wrap_width = 0; public int m_wrap_height = 0; /** * Create a new WrapLabel. * * @param str the content of the label */ public WrapLabel(string? str = null) { wrap = true; wrap_mode = Pango.WrapMode.WORD_CHAR; set_alignment(0, 0); set_text(str); set_wrap_width(m_wrap_width); } private void set_wrap_width(int width) { if (width == 0) { return; } get_layout().set_width((int) (width * Pango.SCALE)); int unused = 0; get_layout().get_pixel_size(out unused, out m_wrap_height); if (m_wrap_width != width) { m_wrap_width = width; queue_resize(); } } public override void get_preferred_width (out int minimum_width, out int natural_width) { minimum_width = natural_width = m_wrap_width; } public override void size_allocate(Gtk.Allocation alloc) { base.size_allocate(alloc); set_wrap_width(alloc.width); } } granite-0.3.0/lib/Widgets/DecoratedWindow.vala000644 001750 001750 00000023453 12340443640 022761 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Granite Developers This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Authored by: Tom Beckmann ***/ namespace Granite.Widgets { /** * This class is a standard decorated window. */ [Deprecated (replacement = "Gtk.Dialog", since = "0.3")] public class DecoratedWindow : CompositedWindow { const string DECORATED_WINDOW_FALLBACK_STYLESHEET = """ .decorated-window { border-style:solid; border-color:alpha (#000, 0.35); background-image:none; background-color:@bg_color; border-radius:6px; } """; // Currently not overridable const string DECORATED_WINDOW_STYLESHEET = """ .decorated-window { border-width:1px; } """; /** * This method sets the given window to the decorated window style * * @param ref_window window to set style to */ public static void set_default_theming (Gtk.Window ref_window) { Utils.set_theming (ref_window, DECORATED_WINDOW_STYLESHEET, StyleClass.DECORATED_WINDOW, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); Utils.set_theming (ref_window, DECORATED_WINDOW_FALLBACK_STYLESHEET, StyleClass.DECORATED_WINDOW, Gtk.STYLE_PROVIDER_PRIORITY_FALLBACK); } /** * Whether to show the window title */ public bool show_title { get; set; default = true; } protected Gtk.Box box { get; private set; } protected Gtk.Window draw_ref { get; private set; } protected Gdk.Pixbuf close_img; private Granite.Drawing.BufferSurface buffer; private const int SHADOW_BLUR = 15; private const int SHADOW_X = 0; private const int SHADOW_Y = 0; private const int CLOSE_BUTTON_X = -3; private const int CLOSE_BUTTON_Y = -3; private const double SHADOW_ALPHA = 0.3; private int w = -1; private int h = -1; private Gtk.Label _title; /** * This creates a new DecoratedWindow * * @param title title to set window's title to * @param window_style style to set window to * @param content_style style to set content to */ public DecoratedWindow (string title = "", string? window_style = null, string? content_style = null) { this.resizable = false; this.has_resize_grip = false; this.window_position = Gtk.WindowPosition.CENTER_ON_PARENT; this.close_img = Utils.get_close_pixbuf (); this._title = new Gtk.Label (null); this._title.halign = Gtk.Align.CENTER; this._title.hexpand = false; this._title.ellipsize = Pango.EllipsizeMode.MIDDLE; this._title.single_line_mode = true; this._title.margin = 6; this._title.margin_left = this._title.margin_right = 6 + this.close_img.get_width () / 3; var attr = new Pango.AttrList (); attr.insert (new Pango.AttrFontDesc (Pango.FontDescription.from_string ("bold"))); this._title.attributes = attr; this.notify["title"].connect (update_titlebar_label); this.notify["show-title"].connect (update_titlebar_label); this.notify["deletable"].connect ( () => { w = -1; h = -1; // get it to redraw the buffer this.queue_resize (); this.queue_draw (); }); this.title = title; this.deletable = true; this.box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); this.box.margin = SHADOW_BLUR + 1; // SHADOW_BLUR + border_width this.draw_ref = new Gtk.Window (); // set theming set_default_theming (this.draw_ref); // extra theming if (window_style != null && window_style != "") this.draw_ref.get_style_context ().add_class (window_style); if (content_style != null && content_style != "") this.box.get_style_context ().add_class (content_style); this.box.pack_start (this._title, false); base.add (this.box); this.add_events (Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK); this.motion_notify_event.connect (on_motion_notify); this.delete_event.connect_after (on_delete_event); this.size_allocate.connect (on_size_allocate); this.draw.connect (draw_widget); } /** * This method adds new item to window * * @param w widget to add to window */ public new void add (Gtk.Widget w) { this.box.pack_start (w, true, true); } /** * This method removes item to window * * @param w widget to remove from window */ public new void remove (Gtk.Widget w) { this.box.remove (w); } private void update_titlebar_label () { // If the show_title property is false, we show an empty titlebar // instead of hiding the _title label. This is important since the titlebar // sets a sane vertical padding at the top of the window. this._title.label = (show_title) ? this.title : ""; } private bool draw_widget (Cairo.Context ctx) { ctx.set_source_surface (this.buffer.surface, 0, 0); ctx.paint (); return false; } private void on_size_allocate (Gtk.Allocation alloc) { if (alloc.width == w && h == alloc.height) return; this.w = alloc.width; this.h = alloc.height; this.buffer = new Granite.Drawing.BufferSurface (w, h); int x = SHADOW_BLUR + SHADOW_X; int y = SHADOW_BLUR + SHADOW_Y; int width = w - 2 * SHADOW_BLUR + SHADOW_X; int height = h - 2 * SHADOW_BLUR + SHADOW_Y; this.buffer.context.rectangle (x, y, width, height); this.buffer.context.set_source_rgba (0, 0, 0, SHADOW_ALPHA); this.buffer.context.fill (); this.buffer.exponential_blur (SHADOW_BLUR / 2); draw_ref.get_style_context ().render_activity (this.buffer.context, x, y, width, height); if (this.deletable) { Gdk.cairo_set_source_pixbuf (this.buffer.context, close_img, SHADOW_BLUR / 2 + CLOSE_BUTTON_X, SHADOW_BLUR / 2 + CLOSE_BUTTON_Y); this.buffer.context.paint (); } } private bool on_motion_notify (Gdk.EventMotion e) { if (coords_over_close_button (e.x_root, e.y_root)) this.get_window ().set_cursor (new Gdk.Cursor (Gdk.CursorType.HAND1)); else this.get_window ().set_cursor (null); return true; } public override bool button_press_event (Gdk.EventButton e) { if (coords_over_close_button (e.x_root, e.y_root)) return true; if (e.type == Gdk.EventType.BUTTON_PRESS && e.button == 1) this.begin_move_drag ((int) e.button, (int) e.x_root, (int) e.y_root, e.time); return base.button_press_event (e); } public override bool button_release_event (Gdk.EventButton e) { bool on_close_button = coords_over_close_button (e.x_root, e.y_root); if (on_close_button) { var event = (Gdk.Event*) (&e); this.delete_event (event->any); } return on_close_button; } public override bool key_press_event (Gdk.EventKey event) { if (event.keyval == Gdk.Key.Escape) { this.delete_event (((Gdk.Event*) (&event))->any); return true; } return base.key_press_event (event); } private bool coords_over_close_button (double x_root, double y_root) { int w_x, w_y; this.get_position (out w_x, out w_y); int x = (int) x_root - w_x; int y = (int) y_root - w_y; return this.deletable && x > (SHADOW_BLUR / 2 + CLOSE_BUTTON_X) && x < (close_img.get_width () + SHADOW_BLUR / 2 + CLOSE_BUTTON_X) && y > (SHADOW_BLUR / 2 + CLOSE_BUTTON_Y) && y < (close_img.get_height () + SHADOW_BLUR / 2 + CLOSE_BUTTON_Y); } private bool on_delete_event (Gdk.EventAny event) { if (this.deletable) this.destroy (); return false; } } } granite-0.3.0/lib/Widgets/ContractorView.vala000644 001750 001750 00000016655 12340443640 022656 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Tom Beckmann This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Gtk; /** * This class provides a simple way to look at contracts from Contractor. * It uses a long-obsolete and unused revision of Contractor API and will not * work with stable releases of Contractor. */ [Deprecated (since = "0.2")] public class Granite.Widgets.ContractorView : TreeView { /** * indicates if it was possible to connect to contractor */ public bool contractor_available; public delegate void ContractCallback (); private Gee.HashMap outsiders; private int[] blacklisted_pos; private ListStore list; private struct DelegateWrapper { unowned ContractCallback method; } /** * the index of the currently selected contract */ public int selected { get { TreePath path; this.get_cursor (out path, null); return int.parse (path.to_string ()); } set { this.set_cursor (new TreePath.from_string (value.to_string ()), null, false); } } /** * A contract was launched using double clicking */ public signal void executed (); /** * the original array of contracts returned by contractor */ HashTable[] contracts; /** * Create the default ContractorView * * @param filename the file * @param mime the mimetype of the file * @param icon_size the size of the icon in pixel * @param show_contract_name show the name of the contract in the list */ public ContractorView (string filename, string mime, int icon_size = 32, bool show_contract_name = true) { /* Setup the ListStore */ list = new ListStore (2, typeof (Gdk.Pixbuf), typeof (string)); outsiders = new Gee.HashMap (); this.model = list; /* GUI */ this.headers_visible = false; this.hexpand = true; /* Events */ row_activated.connect (() => { run_selected (); executed (); }); /* View */ var cell1 = new CellRendererPixbuf (); cell1.set_padding (5, 8); this.insert_column_with_attributes (-1, "", cell1, "pixbuf", 0); var cell2 = new CellRendererText (); cell2.set_padding (2, 8); this.insert_column_with_attributes (-1, "", cell2, "markup", 1); this.contracts = Granite.Services.Contractor.get_contract (filename, mime); if (this.contracts == null || this.contracts.length == 0) { warning ("You should install contractor (or no contracts found for this mime).\n"); contractor_available = false; TreeIter it; list.append (out it); bool contractor_installed = this.contracts == null; string message = contractor_installed ? _("Could not contact Contractor. You may need to install it") : _("No action found for this file"); try { var icon = IconTheme.get_default ().load_icon ( contractor_installed ? "dialog-error" : "dialog-information", icon_size, 0); list.set (it, 0, icon, 1, message); } catch (Error e) { warning("%s\n", e.message); } set_sensitive(false); } else { contractor_available = true; for (var i=0; i\n"+text; try{ list.set (it, 0, IconTheme.get_default ().load_icon (this.contracts[i].lookup ("IconName"), icon_size, 0), 1, text); } catch (Error e) { warning (e.message); } } this.selected = 0; } } /** * A method to add items to the tree * * @param name the name * @param desc the description * @param icon_name the name of the icon to show * @param icon_size the size of the icon in pixel * @param position the posion the item will be inserted at (first position is 0) * @param method a general method containing all the methods that should be called when the item is activated * (must return void and mustn't have any parameter) */ public void add_item (string name, string desc, string icon_name, int icon_size, int position, ContractCallback method) { TreeIter it; list.insert (out it, position); string text = "" + name + "\n" + desc; try{ list.set (it, 0, IconTheme.get_default ().load_icon (icon_name, icon_size, 0), 1, text); } catch (Error e) { error (e.message); } DelegateWrapper wr = { method }; outsiders[position] = wr; this.selected = 0; } public void name_blacklist (string[] names) { TreeIter it; TreeIter it2; Value value; bool check; int cur_pos = 0; list.get_iter_first (out it); list.get_iter_first (out it2); while (true) { list.get_value (it, 1, out value); check = list.iter_next (ref it2); string text = value.get_string (); if (text[3:text.index_of ("")] in names) { list.remove (it); blacklisted_pos += cur_pos; } if (!check) break; it = it2; cur_pos++; } } public void run_selected () { if (this.selected in outsiders.keys ) { outsiders[this.selected].method (); } else { try { int corr = 0; foreach (int i in outsiders.keys) { //adjust in case of items added if (i > this.selected) break; corr++; } foreach (int i in blacklisted_pos) { //adjust in case of items removed if (i > this.selected) break; corr--; } Process.spawn_command_line_async ( this.contracts[this.selected-corr].lookup ("Exec")); } catch (Error e) { error (e.message); } } } } granite-0.3.0/lib/Widgets/LightWindow.vala000644 001750 001750 00000002643 12340443640 022134 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2012-2013 Granite Developers This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Authored by: Tom Beckmann ***/ namespace Granite.Widgets { /** * This is always-on-top, non-modal window with a large close button. * * {{../../doc/images/LightWindow.png}} */ [Deprecated (replacement="Gtk.Dialog", since = "0.3")] public class LightWindow : DecoratedWindow { /** * Makes a new Window with the Light Theme * * @param title title of new window */ public LightWindow (string title = "") { base (title, StyleClass.CONTENT_VIEW_WINDOW, StyleClass.CONTENT_VIEW); } } } granite-0.3.0/lib/Widgets/OverlayBar.vala000644 001750 001750 00000014537 12340443640 021750 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2012 ammonkey Copyright (C) 2013 Julián Unrrein This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ /** * A floating status bar that displays a single line of text. * * This widget is intended to be used as an overlay for a {@link Gtk.Overlay} and is placed in the * bottom-right corner by default. You can change its position like you would do for any overlay * widget used in a {@link Gtk.Overlay}. * * The Overlay Bar displays a single line of text that can be changed using the "status" property. * * {{../../doc/images/OverlayBar.png}} * * This widget tries to avoid getting in front of the content being displayed inside the {@link Gtk.Overlay} * by moving itself horizontally to the opposite side from the current one when the mouse pointer enters * the widget. * * For this widget to function correctly, the event {@link Gdk.EventMask.ENTER_NOTIFY_MASK} must be set * for the parent {@link Gtk.Overlay}. Overlay Bar's constructor takes care of this automatically, * but you have to be careful not to unset the event for the {@link Gtk.Overlay} at a later stage. * * @see Gtk.Overlay */ public class Granite.Widgets.OverlayBar : Gtk.EventBox { private const string FALLBACK_THEME = """ .overlay-bar { background-color: @bg_color; border-radius: 3px; padding: 3px 6px; margin: 3px; border-style: solid; border-width: 1px; border-color: darker (@bg_color); }"""; private Gtk.Label status_label; /** * Status text displayed inside the Overlay Bar. */ public string status { set { status_label.label = value; } get { return status_label.label; } } /** * Create a new Overlay Bar, and add it to the {@link Gtk.Overlay}. */ public OverlayBar (Gtk.Overlay overlay) { visible_window = false; status_label = new Gtk.Label (null); status_label.set_ellipsize (Pango.EllipsizeMode.END); add (status_label); status_label.show (); set_halign (Gtk.Align.END); set_valign (Gtk.Align.END); set_default_style (); var ctx = get_style_context (); ctx.changed.connect (update_spacing); ctx.changed.connect_after (queue_resize); update_spacing (); overlay.add_events (Gdk.EventMask.ENTER_NOTIFY_MASK); overlay.add_overlay (this); } public override void parent_set (Gtk.Widget? old_parent) { Gtk.Widget parent = get_parent (); if (old_parent != null) old_parent.enter_notify_event.disconnect (enter_notify_callback); if (parent != null) parent.enter_notify_event.connect (enter_notify_callback); } public override bool draw (Cairo.Context cr) { var ctx = get_style_context (); ctx.render_background (cr, 0, 0, get_allocated_width (), get_allocated_height ()); ctx.render_frame (cr, 0, 0, get_allocated_width (), get_allocated_height ()); return base.draw (cr); } /* Using Cairo.Context's render_background and render_frame methods requires complementary space-allocator code, to account for the widget's border width. The following three methods guarantee that the borders drawn by render_frame don't overlap the text in the widget. */ public override Gtk.SizeRequestMode get_request_mode () { return Gtk.SizeRequestMode.HEIGHT_FOR_WIDTH; } public override void get_preferred_width (out int minimum_width, out int natural_width) { Gtk.Requisition label_min_size, label_natural_size; status_label.get_preferred_size (out label_min_size, out label_natural_size); var ctx = get_style_context (); var state = ctx.get_state (); var border = ctx.get_border (state); int extra_allocation = border.left + border.right; minimum_width = extra_allocation + label_min_size.width; natural_width = extra_allocation + label_natural_size.width; } public override void get_preferred_height_for_width (int width, out int minimum_height, out int natural_height) { Gtk.Requisition label_min_size, label_natural_size; status_label.get_preferred_size (out label_min_size, out label_natural_size); var ctx = get_style_context (); var state = ctx.get_state (); var border = ctx.get_border (state); int extra_allocation = border.top + border.bottom; minimum_height = extra_allocation + label_min_size.height; natural_height = extra_allocation + label_natural_size.height; } private void update_spacing () { var ctx = get_style_context (); var state = ctx.get_state (); var padding = ctx.get_padding (state); status_label.margin_top = padding.top; status_label.margin_bottom = padding.bottom; status_label.margin_left = padding.left; status_label.margin_right = padding.right; var margin = ctx.get_margin (state); margin_top = margin.top; margin_bottom = margin.bottom; margin_left = margin.left; margin_right = margin.right; } private void set_default_style () { int priority = Gtk.STYLE_PROVIDER_PRIORITY_FALLBACK; Granite.Widgets.Utils.set_theming (this, FALLBACK_THEME, StyleClass.OVERLAY_BAR, priority); } private bool enter_notify_callback (Gdk.EventCrossing event) { if (get_halign () == Gtk.Align.START) set_halign (Gtk.Align.END); else set_halign (Gtk.Align.START); return false; } } granite-0.3.0/lib/Widgets/AppMenu.vala000644 001750 001750 00000005635 12340443640 021246 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Mathijs Henquet This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Gtk; using Granite.Services; namespace Granite.Widgets { /** * An App Menu is the gear menu that goes on the right of the toolbar. */ public class AppMenu : ToolButtonWithMenu { /** * Menu item for about page. */ public Gtk.MenuItem about_item; /** * Called when showing about. */ public signal void show_about(Gtk.Widget w); /** * Makes new AppMenu. * * @param menu menu to be turned into an AppMenu. */ public AppMenu (Gtk.Menu menu) { base (new Image.from_icon_name ("application-menu", IconSize.MENU), _("Menu"), menu); } /** * Makes new AppMenu with built-in about page. * * @param application application of AppMenu. * @param menu menu to be created. */ public AppMenu.with_app (Granite.Application? application, Gtk.Menu menu) { base (new Image.from_icon_name ("application-menu", IconSize.MENU), _("Menu"), menu); this.add_items (menu); about_item.activate.connect (() => { show_about(get_toplevel()); }); } /** * Create a new AppMenu, parameters are unused now. */ [Deprecated (since = "granite-0.1")] public AppMenu.with_urls (Gtk.Menu menu, string help_url, string translate_url, string bug_url) { critical("This is a deprecated creation method: AppMenu.with_urls"); base (new Image.from_icon_name ("application-menu", IconSize.MENU), _("Menu"), menu); } /** * This method adds makes a properly formatted App Menu menu from given menu * * @param menu menu to format */ public void add_items (Gtk.Menu menu) { about_item = new Gtk.MenuItem.with_label (_("About")); if (menu.get_children ().length () > 0) menu.append (new SeparatorMenuItem ()); menu.append (about_item); } } } granite-0.3.0/lib/Widgets/TimePicker.vala000644 001750 001750 00000030623 12340443640 021730 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Maxwell Barvian , Corentin Noël This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Widgets { /** * This widget allows users to easily pick a time. */ public class TimePicker : Gtk.Entry { const int OFFSET = 15; const int MARGIN = 6; // Signals /** * Sent when the time got changed */ public signal void time_changed (); /** * Format used in 12h mode */ public string format_12 { get; construct; } /** * Format used in 24h mode */ public string format_24 { get; construct; } private GLib.DateTime _time = null; /** * Current time */ public GLib.DateTime time { get { if (_time == null) { _time = new GLib.DateTime.now_local (); changing_time = true; if (_time.get_hour () > 12) { am_pm_switch.active = true; } else { am_pm_switch.active = false; } update_text (true); changing_time = false; } return _time; } set { _time = value; changing_time = true; if (_time.get_hour () > 12) { am_pm_switch.active = true; } else { am_pm_switch.active = false; } update_text (true); changing_time = false; } } private string old_string = ""; private Gtk.SpinButton hours_spinbutton; private Gtk.SpinButton minutes_spinbutton; private Gtk.Switch am_pm_switch; private Gtk.Grid am_pm_grid; private bool changing_time = false; private Gtk.Popover popover; construct { if (format_12 == null) format_12 = Granite.DateTime.get_default_time_format (true); if (format_24 == null) format_24 = Granite.DateTime.get_default_time_format (false); max_length = 8; secondary_icon_gicon = new ThemedIcon.with_default_fallbacks ("appointment-symbolic"); icon_release.connect (on_icon_press); // Creates the popover var pop_grid = new Gtk.Grid (); pop_grid.column_spacing = 6; pop_grid.row_spacing = 6; am_pm_grid = new Gtk.Grid (); am_pm_grid.column_spacing = 6; am_pm_grid.no_show_all = true; am_pm_switch = new Gtk.Switch (); am_pm_switch.notify["active"].connect (() => { if (changing_time == true) { return; } if (am_pm_switch.active == true) { time = _time.add_hours (12); } else { time = _time.add_hours (-12); } update_text (true); }); var am_pm_label = new Gtk.Label (_("PM")); am_pm_label.hexpand = true; am_pm_label.justify = Gtk.Justification.RIGHT; am_pm_grid.attach (am_pm_switch, 0, 0, 1, 1); am_pm_grid.attach (am_pm_label, 1, 0, 1, 1); if (Granite.DateTime.is_clock_format_12h ()) { hours_spinbutton = new Gtk.SpinButton.with_range (1, 12, 1); } else { hours_spinbutton = new Gtk.SpinButton.with_range (0, 23, 1); } hours_spinbutton.orientation = Gtk.Orientation.VERTICAL; hours_spinbutton.wrap = true; hours_spinbutton.value_changed.connect (() => update_time (true)); minutes_spinbutton = new Gtk.SpinButton.with_range (0, 59, 1); minutes_spinbutton.orientation = Gtk.Orientation.VERTICAL; minutes_spinbutton.wrap = true; minutes_spinbutton.value_changed.connect (() => update_time (false)); /// TRANSLATORS: separates hours from minutes. var separation_label = new Gtk.Label (_(":")); pop_grid.attach (hours_spinbutton, 0, 0, 1, 1); pop_grid.attach (separation_label, 1, 0, 1, 1); pop_grid.attach (minutes_spinbutton, 2, 0, 1, 1); pop_grid.attach (am_pm_grid, 0, 1, 3, 1); pop_grid.margin = MARGIN; popover = new Gtk.Popover (this); popover.add (pop_grid); // Connecting to events allowing manual changes add_events (Gdk.EventMask.FOCUS_CHANGE_MASK|Gdk.EventMask.SCROLL_MASK); focus_out_event.connect (() => { is_unfocused (); return false; }); scroll_event.connect ((event) => { switch (event.direction) { case Gdk.ScrollDirection.UP: case Gdk.ScrollDirection.RIGHT: _time = _time.add_minutes (1); break; case Gdk.ScrollDirection.DOWN: case Gdk.ScrollDirection.LEFT: _time = _time.add_minutes (-1); break; default: break; } update_text (); return false; }); activate.connect (is_unfocused); update_text (); } /** * Creates a new TimePicker. * * @param format_12 The desired custom 12h format. For example "%l:%M %p". * @param format_24 The desired custom 24h format. For example "%H:%M". */ public TimePicker.with_format (string format_12, string format_24) { Object (format_12: format_12, format_24: format_24); } private void update_time (bool is_hour) { if (changing_time == true) { return; } if (is_hour == true) { var new_hour = hours_spinbutton.get_value_as_int () - time.get_hour (); if (Granite.DateTime.is_clock_format_12h ()) { if (hours_spinbutton.get_value_as_int () == 12 && am_pm_switch.active == false) { _time = _time.add_hours (-_time.get_hour ()); } else if (hours_spinbutton.get_value_as_int () < 12 && am_pm_switch.active == false) { _time = _time.add_hours (new_hour); } else if (hours_spinbutton.get_value_as_int () == 12 && am_pm_switch.active == true) { _time = _time.add_hours (-_time.get_hour () + 12); } else if (hours_spinbutton.get_value_as_int () < 12 && am_pm_switch.active == true) { _time = _time.add_hours (new_hour + 12); if (time.get_hour () <= 12) _time = _time.add_hours (12); } } else { _time = _time.add_hours (new_hour); } } else { _time = time.add_minutes (minutes_spinbutton.get_value_as_int () - time.get_minute ()); } update_text (); } private void on_icon_press (Gtk.EntryIconPosition position, Gdk.Event event) { changing_time = true; if (Granite.DateTime.is_clock_format_12h () && time.get_hour () > 12) hours_spinbutton.set_value (time.get_hour () - 12); else hours_spinbutton.set_value (time.get_hour ()); if (Granite.DateTime.is_clock_format_12h ()) { am_pm_grid.no_show_all = false; am_pm_grid.show_all (); if (time.get_hour () > 12) { hours_spinbutton.set_value (time.get_hour () - 12); } else if (time.get_hour () == 0) { hours_spinbutton.set_value (12); } else { hours_spinbutton.set_value (time.get_hour ()); } } else { am_pm_grid.hide (); hours_spinbutton.set_value (time.get_hour ()); } minutes_spinbutton.set_value (time.get_minute ()); changing_time = false; Gdk.Rectangle rect = Gdk.Rectangle (); int x = 0; int y = 0; position_dropdown (out x, out y); rect.x = x; rect.y = y; popover.pointing_to = rect; popover.position = Gtk.PositionType.BOTTOM; popover.show_all (); } protected virtual void position_dropdown (out int x, out int y) { Gtk.Allocation size; get_allocation (out size); x = size.width - OFFSET; y = size.height; } private void is_unfocused () { if (popover.visible == false && old_string.collate (text) != 0) { old_string = text; parse_time (text.dup ()); } } private void parse_time (string timestr) { string current = ""; bool is_hours = true; bool is_suffix = false; bool has_suffix = false; int? hour = null; int? minute = null; foreach (var c in timestr.down ().to_utf8 ()) { if (c.isdigit ()) { current = "%s%c".printf (current, c); } else { if (is_hours == true && is_suffix == false && current != "") { is_hours = false; hour = int.parse (current); current = ""; } else if (is_hours == false && is_suffix == false && current != "") { minute = int.parse (current); current = ""; } if ((c.to_string ().contains ("a") || c.to_string ().contains ("p")) && is_suffix == false) { is_suffix = true; current = "%s%c".printf (current, c); } if (c.to_string ().contains ("m") && is_suffix == true) { if (hour == null || minute == null) return; // We can imagine that some will try to set it to "19:00 am" if (current.contains ("a") || hour > 12) { time = time.add_hours (hour - time.get_hour ()); } else { time = time.add_hours (hour + 12 - time.get_hour ()); } time = time.add_minutes (minute - time.get_minute ()); has_suffix = true; } } } if (is_hours == false && is_suffix == false && current != "") { minute = int.parse (current); } if (hour == null || minute == null) { update_text (); return; } if (has_suffix == false) { time = time.add_hours (hour - time.get_hour ()); time = time.add_minutes (minute - time.get_minute ()); } update_text (); } private void update_text (bool no_signal = false) { if (Granite.DateTime.is_clock_format_12h ()) set_text (time.format (format_12)); else set_text (time.format (format_24)); old_string = text; if (no_signal == false) time_changed (); } } }granite-0.3.0/lib/Widgets/Welcome.vala000644 001750 001750 00000020667 12340443640 021276 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Maxwell Barvian , Victor Eduardo This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Gtk; /** * This class is for making a first-launch screen easily * * It can be used to create a list of one-time action items that need to be executed in order to setup the app. * * {{../../doc/images/Welcome.png}} */ public class Granite.Widgets.Welcome : Gtk.EventBox { // Signals public signal void activated (int index); /** * List of buttons for action items */ protected new GLib.List children = new GLib.List (); /** * Box for action items */ protected Gtk.Box options; /** * This is the title of the welcome widget. */ public string title { get { return title_label.get_label (); } set { title_label.set_label (value); } } /** * This is the subtitle of the welcome widget. */ public string subtitle { get { return subtitle_label.get_label (); } set { subtitle_label.set_label (value); } } private Gtk.Label title_label; private Gtk.Label subtitle_label; /** * Makes new Welcome Page * * @param title_text main title for new Welcome Page * @param subtitle_text subtitle text for new Welcome Page */ public Welcome (string title_text, string subtitle_text) { Gtk.Box content = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); // Box properties content.homogeneous = false; // Add content-view styling get_style_context().add_class (StyleClass.CONTENT_VIEW); // Top spacer content.pack_start (new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0), true, true, 0); // Labels title_label = new Gtk.Label (title_text); Utils.apply_text_style_to_label (TextStyle.H1, title_label); title_label.set_justify (Gtk.Justification.CENTER); content.pack_start (title_label, false, true, 0); subtitle_label = new Gtk.Label (subtitle_text); Utils.apply_text_style_to_label (TextStyle.H2, subtitle_label); subtitle_label.sensitive = false; subtitle_label.set_justify (Gtk.Justification.CENTER); content.pack_start (subtitle_label, false, true, 2); // Options wrapper this.options = new Gtk.Box (Gtk.Orientation.VERTICAL, 8); var options_wrapper = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); options_wrapper.pack_start (new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0), true, true, 0); // left padding options_wrapper.pack_start (this.options, false, false, 0); // actual options options_wrapper.pack_end (new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0), true, true, 0); // right padding content.pack_start (options_wrapper, false, false, 20); // Bottom spacer content.pack_end (new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0), true, true, 0); add (content); } /** * Sets action item of given index's visiblity * * @param index index of action item to be changed * @param val value deteriming whether the action item is visible */ public void set_item_visible (uint index, bool val) { if (index < children.length () && children.nth_data (index) is Gtk.Widget) { children.nth_data(index).set_no_show_all (!val); children.nth_data(index).set_visible (val); } } /** * Removes action item of given index * * @param index index of action item to remove */ public void remove_item (uint index) { if (index < children.length () && children.nth_data (index) is Gtk.Widget) { var item = children.nth_data (index); item.destroy (); children.remove (item); } } /** * Sets action item of given index sensitivity * * @param index index of action item to be changed * @param val value deteriming whether the action item is senstitive */ public void set_item_sensitivity (uint index, bool val) { if (index < children.length () && children.nth_data (index) is Gtk.Widget) children.nth_data (index).set_sensitive (val); } /** * Appends new action item to welcome page with icon * * @param icon_name icon to be set as icon for action item * @param option_text text to be set as the header for action item * @param description_text text to be set as description for action item * @return index of new item */ public int append (string icon_name, string option_text, string description_text) { Gtk.Image? image = new Gtk.Image.from_icon_name (icon_name, Gtk.IconSize.DIALOG); return append_with_image (image, option_text, description_text); } /** * Appends new action item to welcome page with Gtk.Pixbuf icon * * @param pixbuf pixbuf to be set as icon for action item * @param option_text text to be set as the header for action item * @param description_text text to be set as description for action item * @return index of new item */ public int append_with_pixbuf (Gdk.Pixbuf? pixbuf, string option_text, string description_text) { var image = new Gtk.Image.from_pixbuf (pixbuf); return append_with_image (image, option_text, description_text); } /** * Appends new action item to welcome page with Gtk.Image icon * * @param image image to be set as icon for action item * @param option_text text to be set as the header for action item * @param description_text text to be set as description for action item * @return index of new item */ public int append_with_image (Gtk.Image? image, string option_text, string description_text) { // Option label var label = new Gtk.Label (Markup.printf_escaped ("%s", option_text)); label.use_markup = true; label.halign = Gtk.Align.START; label.valign = Gtk.Align.CENTER; // Description label var description = new Gtk.Label (Markup.printf_escaped ("%s", description_text)); description.use_markup = true; description.halign = Gtk.Align.START; description.valign = Gtk.Align.CENTER; description.sensitive = false; // Button var button = new Gtk.Button (); button.set_relief (Gtk.ReliefStyle.NONE); // Button contents wrapper var button_contents = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 7); // Add left image if (image != null) { image.set_pixel_size (48); button_contents.pack_start (image, false, true, 8); } // Add right text wrapper var text_wrapper = new Gtk.Box (Gtk.Orientation.VERTICAL, 3); // top spacing text_wrapper.pack_start (new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0), true, true, 0); text_wrapper.pack_start (label, false, false, 0); text_wrapper.pack_start (description, false, false, 0); // bottom spacing text_wrapper.pack_end (new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0), true, true, 0); button_contents.pack_start (text_wrapper, false, true, 8); button.add (button_contents); children.append (button); options.pack_start (button, false, false, 0); button.button_release_event.connect (() => { int index = this.children.index (button); activated (index); // send signal return false; }); return this.children.index (button); } } granite-0.3.0/lib/Widgets/CompositedWindow.vala000644 001750 001750 00000003103 12340443640 023163 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Maxwell Barvian This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ using Gtk; using Gdk; namespace Granite.Widgets { /** * A transparent window without decorations and so on. Useful for any kinds of overlays and similar things */ public class CompositedWindow : Gtk.Window, Gtk.Buildable { private const string STYLESHEET = ".composited { background-color: rgba (0,0,0,0); }"; construct { // Window properties app_paintable = true; decorated = false; resizable = false; set_visual (get_screen ().get_rgba_visual()); // Set up css provider Utils.set_theming (this, STYLESHEET, StyleClass.COMPOSITED, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); } } } granite-0.3.0/lib/Widgets/ContractorMenu.vala000644 001750 001750 00000011115 12340443640 022632 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2012-2013 Andrea Basso This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ /** * This class provides a simple menu for managing Contractor. * It uses a long-obsolete and unused revision of Contractor API and will not * work with stable releases of Contractor. */ [Deprecated (since = "0.2")] public class Granite.Widgets.ContractorMenu : Gtk.Menu { /** * The Hashtable of available contracts */ HashTable[] contracts; /** * The Hashtable of executables */ Gee.HashMap execs; public delegate void ContractCallback (); private string filepath; private string filemime; /** * Passes when contract is clicked */ public signal void contract_activated (string contract_name); /** * Makes new Contractor Meu * * @param filename the filename of the file * @param mime the mime-type of the file */ public ContractorMenu (string filename, string mime) { filepath = filename; filemime = mime; load_items (filename, mime); } /** * Adds new item to Contractor Menu * * @param name name of menu item * @param icon_name the desired icon for menu item * @param position desired position of menu item * @param method method to be called when menu item is clicked * @param use_stock tells whether to use stock for menu item */ public void add_item (string name, string icon_name, int position, ContractCallback method, bool use_stock = true) { var item = new Gtk.ImageMenuItem (); item.set_always_show_image (true); item.set_use_stock (use_stock); var image = new Gtk.Image.from_icon_name (icon_name, Gtk.IconSize.MENU); item.set_label (name); item.set_image (image); item.activate.connect (()=> { contract_activated (name); method(); }); insert(item, position); item.show (); } /** * Deletes a group of menu items * * @param names of menu items to delete */ public void name_blacklist (string[] names) { this.foreach ((item)=> { if (((Gtk.MenuItem)item).get_label () in names) remove (item); }); } private void load_items (string filename, string mime) { contracts = Granite.Services.Contractor.get_contract (filename, mime); execs = new Gee.HashMap (); for (int i=0;i { try { Process.spawn_command_line_async (execs.get(item.get_label ())); } catch (Error e) { error (e.message); } }); append (item); item.show_all (); } } /** * Updates Contractor menu items * * @param filename the filename of the file * @param mime the mime-type of the file */ public void update (string? filename, string? mime) { this.foreach ((w) => {remove (w);}); string fn = ""; string mm = ""; if (filename != null) { fn = filename; filepath = filename; } else { fn = filepath; } if (mime != null) { mm = mime; filemime = mime; } else { mm = filemime; } load_items (fn, mm); } } granite-0.3.0/lib/Widgets/CellRendererExpander.vala000644 001750 001750 00000011114 12340443640 023723 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2012-2013 Granite Developers This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ /** * An expander renderer. * * For it to draw an expander, the the {@link Gtk.CellRenderer.is_expander} property must * be set to true; otherwise nothing is drawn. The state of the expander (i.e. expanded or * collapsed) is controlled by the {@link Gtk.CellRenderer.is_expanded} property. * * @since 0.2 */ public class Granite.Widgets.CellRendererExpander : Gtk.CellRenderer { public bool is_category_expander { get; set; default = false; } public CellRendererExpander () { } public override Gtk.SizeRequestMode get_request_mode () { return Gtk.SizeRequestMode.HEIGHT_FOR_WIDTH; } public override void get_preferred_width (Gtk.Widget widget, out int minimum_size, out int natural_size) { apply_style_changes (widget); minimum_size = natural_size = get_arrow_size (widget) + 2 * (int) xpad; revert_style_changes (widget); } public override void get_preferred_height_for_width (Gtk.Widget widget, int width, out int minimum_height, out int natural_height) { apply_style_changes (widget); minimum_height = natural_height = get_arrow_size (widget) + 2 * (int) ypad; revert_style_changes (widget); } /** * Gets the size of the expander arrow. * * The default implementation tries to retrieve the "expander-size" style property from * //widget//, as it is primarily meant to be used along with a {@link Gtk.TreeView}. * For those with special needs, it is recommended to override this method. * * @param widget Widget used to query the "expander-size" style property (should be a Gtk.TreeView.) * @return Size of the expander arrow. * @since 0.2 */ public virtual int get_arrow_size (Gtk.Widget widget) { int arrow_size; widget.style_get ("expander-size", out arrow_size); return arrow_size; } public override void render (Cairo.Context context, Gtk.Widget widget, Gdk.Rectangle bg_area, Gdk.Rectangle cell_area, Gtk.CellRendererState flags) { if (!is_expander) return; unowned Gtk.StyleContext ctx = apply_style_changes (widget); Gdk.Rectangle aligned_area = get_aligned_area (widget, flags, cell_area); int arrow_size = int.min (get_arrow_size (widget), aligned_area.width); int offset = arrow_size / 2; int x = aligned_area.x + aligned_area.width / 2 - offset; int y = aligned_area.y + aligned_area.height / 2 - offset; var state = ctx.get_state (); const Gtk.StateFlags EXPANDED_FLAG = Gtk.StateFlags.ACTIVE; ctx.set_state (is_expanded ? state | EXPANDED_FLAG : state & ~EXPANDED_FLAG); ctx.render_expander (context, x, y, arrow_size, arrow_size); revert_style_changes (widget); } [Deprecated (replacement = "Gtk.CellRenderer.get_preferred_size", since = "")] public override void get_size (Gtk.Widget widget, Gdk.Rectangle? cell_area, out int x_offset, out int y_offset, out int width, out int height) { assert_not_reached (); } private unowned Gtk.StyleContext apply_style_changes (Gtk.Widget widget) { unowned Gtk.StyleContext ctx = widget.get_style_context (); ctx.save (); if (is_category_expander) ctx.add_class (StyleClass.CATEGORY_EXPANDER); else ctx.add_class (Gtk.STYLE_CLASS_EXPANDER); return ctx; } private void revert_style_changes (Gtk.Widget widget) { widget.get_style_context ().restore (); } } granite-0.3.0/lib/Widgets/ThinPaned.vala000644 001750 001750 00000022521 12340443640 021544 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2012-2013 Victor Eduardo This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ /** * A widget with two adjustable panes. * * A ThinPaned widget draws a thin separator between two child widgets, without * compromising usability, because it offers a wide-enough invisible handle that the user * can drag to adjust the division. * * The size of the invisible handle can be customized through the //"overlay-handle-size"// * style property. For instance: * * {{{ * * { * -GraniteWidgetsThinPaned-overlay-handle-size: 8px; * } * }}} * * @see Gtk.Paned * @since 0.2 */ public class Granite.Widgets.ThinPaned : Gtk.Paned { private const string STYLE_PROP_OVERLAY_HANDLE_SIZE = "overlay-handle-size"; private const string DEFAULT_STYLESHEET = """ GraniteWidgetsThinPaned { -GtkPaned-handle-size: 1px; } """; private const string FALLBACK_STYLESHEET = """ GraniteWidgetsThinPaned.sidebar-pane-separator { background-color: alpha (#000, 0.3); border-width: 0; } """; private Gdk.Window overlay_handle; private bool in_resize = false; static construct { install_style_property (new ParamSpecInt (STYLE_PROP_OVERLAY_HANDLE_SIZE, "Overlay handle's size", "Width of the invisible overlay handle", 1, 50, 10, ParamFlags.READABLE)); } public ThinPaned (Gtk.Orientation orientation = Gtk.Orientation.HORIZONTAL) { this.orientation = orientation; Utils.set_theming (this, DEFAULT_STYLESHEET, null, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); Utils.set_theming (this, FALLBACK_STYLESHEET, null, Gtk.STYLE_PROVIDER_PRIORITY_THEME); } public unowned Gdk.Window get_overlay_handle_window () { return overlay_handle; } public override void realize () { base.realize (); // Create invisible overlay handle var attributes = Gdk.WindowAttr (); attributes.window_type = Gdk.WindowType.CHILD; attributes.x = 0; attributes.y = 0; attributes.width = 0; attributes.height = 0; attributes.wclass = Gdk.WindowWindowClass.INPUT_ONLY; attributes.event_mask = Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.ENTER_NOTIFY_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.POINTER_MOTION_HINT_MASK; var attributes_mask = Gdk.WindowAttributesType.X | Gdk.WindowAttributesType.Y | Gdk.WindowAttributesType.CURSOR; overlay_handle = new Gdk.Window (get_window (), attributes, attributes_mask); // Have GTK+ forward the events to this widget overlay_handle.set_user_data (this); update_overlay_handle (); } public override void unrealize () { base.unrealize (); overlay_handle.set_user_data (null); overlay_handle.destroy (); overlay_handle = null; } public override void map () { base.map (); overlay_handle.show (); } public override void unmap () { base.unmap (); overlay_handle.hide (); } public override bool draw (Cairo.Context ctx) { base.draw (ctx); // if the overlay handle is not visible, don't draw a pane separator. if (!overlay_handle.is_visible ()) return false; Gtk.Allocation allocation; get_allocation (out allocation); var style_context = get_style_context (); var state = style_context.get_state (); if (is_focus) state |= Gtk.StateFlags.SELECTED; if (in_resize) state |= Gtk.StateFlags.PRELIGHT; double width, height; if (orientation == Gtk.Orientation.HORIZONTAL) { width = 1; height = allocation.height; } else { width = allocation.width; height = 1; } ctx.save (); Gtk.cairo_transform_to_window (ctx, this, get_handle_window ()); // render normal background to override default handle. style_context.render_background (ctx, 0, 0, width, height); style_context.save (); style_context.add_class (StyleClass.THIN_PANE_SEPARATOR); style_context.set_state (state); // draw thin separator. We don't use render_handle() because we're // only supposed to draw a thin separator without any marks. style_context.render_background (ctx, 0, 0, width, height); ctx.restore (); style_context.restore (); return false; } public override void size_allocate (Gtk.Allocation allocation) { base.size_allocate (allocation); update_overlay_handle (); } private void update_overlay_handle () { if (overlay_handle == null || !get_realized ()) return; int overlay_handle_x, overlay_handle_y, overlay_handle_width, overlay_handle_height; var default_handle = get_handle_window (); default_handle.get_position (out overlay_handle_x, out overlay_handle_y); overlay_handle_width = default_handle.get_width (); overlay_handle_height = default_handle.get_height (); int overlay_handle_size; style_get (STYLE_PROP_OVERLAY_HANDLE_SIZE, out overlay_handle_size); if (orientation == Gtk.Orientation.HORIZONTAL) { overlay_handle_x -= overlay_handle_size / 2; overlay_handle_width += overlay_handle_size; } else { overlay_handle_y -= overlay_handle_size / 2; overlay_handle_height += overlay_handle_size; } overlay_handle.move_resize (overlay_handle_x, overlay_handle_y, overlay_handle_width, overlay_handle_height); state_flags_changed (0); // Updates the handle's cursor if (get_mapped () && default_handle.is_visible ()) overlay_handle.show (); else overlay_handle.hide (); } public override void state_flags_changed (Gtk.StateFlags previous_state) { base.state_flags_changed (previous_state); if (get_realized ()) { var default_handle_cursor = get_handle_window ().get_cursor (); if (overlay_handle.get_cursor () != default_handle_cursor) overlay_handle.set_cursor (default_handle_cursor); } } public override bool motion_notify_event (Gdk.EventMotion event) { if (!in_resize) return base.motion_notify_event (event); var device = event.device ?? Gtk.get_current_event_device (); if (device == null) { var display = get_display (); if (display != null) { var dev_manager = display.get_device_manager (); if (dev_manager != null) device = dev_manager.list_devices (Gdk.DeviceType.MASTER).nth_data (0); } } if (device != null) { int x, y, pos = 0; get_window ().get_device_position (device, out x, out y, null); Gtk.Allocation allocation; get_allocation (out allocation); if (orientation == Gtk.Orientation.HORIZONTAL) { x -= allocation.x; pos = Utils.is_left_to_right (this) ? x : get_allocated_width () - x; } else { pos = y - allocation.y; } position = pos.clamp (min_position, max_position); return true; } return_val_if_reached (false); } public override bool button_press_event (Gdk.EventButton event) { if (!in_resize && event.button == Gdk.BUTTON_PRIMARY && event.window == overlay_handle) { in_resize = true; Gtk.grab_add (this); return true; } return base.button_press_event (event); } public override bool button_release_event (Gdk.EventButton event) { if (event.window == overlay_handle) { in_resize = false; Gtk.grab_remove (this); return true; } return base.button_release_event (event); } public override bool grab_broken_event (Gdk.EventGrabBroken event) { in_resize = false; return base.grab_broken_event (event); } } granite-0.3.0/lib/Widgets/PopOver.vala000644 001750 001750 00000043330 12340443640 021265 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Lucas Baudin This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ /** * /!\ Unstable API * * PopOver widget. It is a Dialog you can attach to a widget, e.g. a button. * * It is a dialog you can attach to a widget, to make it look * more consistent, and easier to understand. e.g. if you need to make a popup * after clicking on a button as "Create a new document" to choose the type * of the document, a popover is more adapted because you can see which button * is related to the button, etc... It is also less agressive than a usual * dialog because it doesn't hide a big part of the screen. And it is closed * when it lose focus. * * {{../../doc/images/PopOver.png}} * */ public class Granite.Widgets.PopOver : Gtk.Dialog { protected int BORDER_RADIUS; protected int BORDER_WIDTH; protected int SHADOW_SIZE; protected int ARROW_HEIGHT; protected int ARROW_WIDTH; protected Gtk.Border PADDINGS; double offset = 15.0; const int MARGIN = 12; Gtk.Widget menu; Gtk.Box hbox; Gtk.Box abox; /** * Location of small triangle of popover */ public enum PopPosition { NONE, TOPLEFT, TOPRIGHT, BOTTOMLEFT, BOTTOMRIGHT } private const string POPOVER_STYLESHEET = """ .composited { background-color: rgba (0, 0, 0, 0.0); } """; PopPosition pos = PopPosition.NONE; protected bool arrow_up = false; protected double arrow_offset = 35.0; static construct { install_style_property (new GLib.ParamSpecInt ("border-radius", "Border radius", "Border radius of the popover", 0, 50, 8, ParamFlags.READABLE)); install_style_property (new GLib.ParamSpecInt ("border-width", "Border width", "Width of the popover's outer border", 0, 8, 1, ParamFlags.READABLE)); install_style_property (new GLib.ParamSpecInt ("shadow-size", "Shadow size", "Size of the popover's shadow", 4, 50, 20, ParamFlags.READABLE)); install_style_property (new GLib.ParamSpecInt ("arrow-height", "Arrow height", "Height of the popover's arrow", 0, 50, 14, ParamFlags.READABLE)); install_style_property (new GLib.ParamSpecInt ("arrow-width", "Arrow width", "Width of the popover's arrow", 0, 50, 30, ParamFlags.READABLE)); } construct { // Window properties set_visual (get_screen ().get_rgba_visual()); get_style_context ().add_class (StyleClass.POPOVER); get_style_context ().add_class (StyleClass.COMPOSITED); Utils.set_theming_for_screen (get_screen (), POPOVER_STYLESHEET, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); app_paintable = true; decorated = false; resizable = false; set_position(Gtk.WindowPosition.NONE); set_type_hint(Gdk.WindowTypeHint.MENU); skip_pager_hint = true; skip_taskbar_hint = true; } /** * Create a new PopOver */ public PopOver() { modal = true; set_role ("popover"); hbox = get_content_area() as Gtk.Box; abox = get_action_area() as Gtk.Box; menu = new Gtk.Window(); style_get ("border-radius", out BORDER_RADIUS, "border-width", out BORDER_WIDTH, "shadow-size", out SHADOW_SIZE, "arrow-height", out ARROW_HEIGHT, "arrow_width", out ARROW_WIDTH, null); PADDINGS = get_style_context ().get_margin (Gtk.StateFlags.NORMAL); hbox.set_margin_top(PADDINGS.top + ARROW_HEIGHT + SHADOW_SIZE + 5); hbox.set_margin_left(PADDINGS.left + SHADOW_SIZE + 5); hbox.set_margin_right(PADDINGS.right + SHADOW_SIZE + 5); abox.set_margin_left(PADDINGS.left + SHADOW_SIZE + 5); abox.set_margin_right(PADDINGS.right + SHADOW_SIZE + 5); abox.set_margin_bottom(PADDINGS.bottom + SHADOW_SIZE + 5); menu.get_style_context().add_class(StyleClass.POPOVER_BG); size_allocate.connect(on_size_allocate); // if for example a DnD action from within the popover, our drag is broken // In this case, we just simply hide. Releasing the grab would make the DnD stop grab_broken_event.connect (() => { base.hide (); return false; }); // once the DnD action ended, we'll have a blocked window, unless we remove the grab manually again grab_notify.connect ((was_grabbed) => { if (!was_shown || !was_grabbed) return; var pointer = Gdk.Display.get_default ().get_device_manager ().get_client_pointer (); Gtk.device_grab_remove (this, pointer); pointer.ungrab (Gdk.CURRENT_TIME); }); } /** * Hides popover */ public override void hide () { var pointer = Gdk.Display.get_default ().get_device_manager ().get_client_pointer (); Gtk.device_grab_remove (this, pointer); pointer.ungrab (Gdk.CURRENT_TIME); was_shown = false; base.hide (); } // we have a problem with the grab_notify signal, applications like wingpanel which use popovers // for drawing map the popover, so it takes a focus which does not have to released if it is not shown, // so we got to catch that case bool was_shown = false; public override void show () { was_shown = true; base.show (); } /** * Grabs focus * * @return false */ public override bool map_event (Gdk.EventAny event) { var pointer = Gdk.Display.get_default ().get_device_manager ().get_client_pointer (); pointer.grab (get_window (), Gdk.GrabOwnership.NONE, true, Gdk.EventMask.SMOOTH_SCROLL_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.ENTER_NOTIFY_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.POINTER_MOTION_MASK, null, Gdk.CURRENT_TIME); Gtk.device_grab_add (this, pointer, false); return false; } public override bool button_press_event (Gdk.EventButton event) { if (event_in_window (event)) return true; return base.button_press_event (event); } public override bool button_release_event (Gdk.EventButton event) { if (event_in_window (event)) return true; hide (); return false; } bool event_in_window (Gdk.EventButton event) { int x, y, w, h; get_position (out x, out y); get_size (out w, out h); return event.x_root >= x && event.x_root <= x + w && event.y_root >= y && event.y_root <= y + h; } /* May be null if the screen is not composited */ protected Granite.Drawing.BufferSurface? main_buffer = null; protected void reset_buffers () { main_buffer = null; } /** * Set the parent window of the popover. It should not be needed, but it * could solve some bugs on some window manager. */ public void set_parent_pop (Gtk.Window win) { set_transient_for(win); set_parent(win); win.configure_event.connect( () => { hide(); return true; }); } void compute_pop_position(Gdk.Screen screen, Gdk.Rectangle rect) { Gdk.Rectangle monitor_geo; var old_pos = pos; screen.get_monitor_geometry (screen.get_monitor_at_point (rect.x, rect.y), out monitor_geo); if(rect.x > monitor_geo.x + monitor_geo.width/2) { /* left */ if(rect.y < monitor_geo.y + monitor_geo.height/2) { pos = PopPosition.TOPRIGHT; } else { pos = PopPosition.BOTTOMRIGHT; } } else { if(rect.y < monitor_geo.y + monitor_geo.height/2) { pos = PopPosition.TOPLEFT; } else { pos = PopPosition.BOTTOMLEFT; } } switch(pos) { case PopPosition.BOTTOMRIGHT: arrow_up = false; win_x = rect.x - get_allocated_width() + 2*SHADOW_SIZE + ARROW_WIDTH/2 + rect.width / 2; win_y = rect.y - get_allocated_height() + SHADOW_SIZE; arrow_offset = get_allocated_width() - 2*SHADOW_SIZE - 30.0; break; case PopPosition.TOPRIGHT: arrow_up = true; win_x = rect.x - get_allocated_width() + 2*SHADOW_SIZE + ARROW_WIDTH/2 + rect.width / 2; win_y = rect.y - SHADOW_SIZE + rect.height; arrow_offset = get_allocated_width() - 2*SHADOW_SIZE - 30.0; break; case PopPosition.TOPLEFT: arrow_up = true; win_x = rect.x - 30 - SHADOW_SIZE - ARROW_WIDTH/2 + rect.width / 2; win_y = rect.y - SHADOW_SIZE + rect.height; arrow_offset = SHADOW_SIZE + 30.0; break; case PopPosition.BOTTOMLEFT: arrow_up = false; win_x = rect.x - 30 - SHADOW_SIZE - ARROW_WIDTH/2 + rect.width / 2; win_y = rect.y - get_allocated_height() + SHADOW_SIZE; arrow_offset = SHADOW_SIZE + 30.0; break; default: break; } if (arrow_up) { hbox.set_margin_top(PADDINGS.top + SHADOW_SIZE + ARROW_HEIGHT + 5); abox.set_margin_bottom(PADDINGS.bottom + SHADOW_SIZE); } else { hbox.set_margin_top(PADDINGS.top + SHADOW_SIZE + 5); abox.set_margin_bottom(PADDINGS.bottom + SHADOW_SIZE + ARROW_HEIGHT); } if(old_pos != pos) { compute_shadow (get_allocated_width (), get_allocated_height ()); } var w = get_allocated_width (); var h = get_allocated_height (); h -= 2* (PADDINGS.top + SHADOW_SIZE) + ARROW_HEIGHT; w -= 2*(PADDINGS.right + SHADOW_SIZE); get_window ().input_shape_combine_region (new Cairo.Region.rectangle({0, 0, w, h}), PADDINGS.right + SHADOW_SIZE, PADDINGS.top + SHADOW_SIZE + (arrow_up ? ARROW_HEIGHT : 0)); } int win_x; int win_y; /** * Change the position of the popover, to display it under w. * * The arrow of the PopOver is moved at the bottom of the widget, and it is * horizontally centered. * * @param w a normal Gtk.Widget, e.g. a button */ public void move_to_widget (Gtk.Widget w, bool show = true) { int x, y; Gdk.Rectangle rectangle = Gdk.Rectangle (); bool is_visible_window = false; if (w is Gtk.EventBox) { is_visible_window = (w as Gtk.EventBox).visible_window; (w as Gtk.EventBox).visible_window = false; } w.get_window ().get_origin (out x, out y); Gtk.Allocation alloc; w.get_allocation (out alloc); if(w is Gtk.EventBox) { (w as Gtk.EventBox).visible_window = is_visible_window; } x += alloc.x; y += alloc.y; rectangle.x = x; rectangle.y = y; rectangle.width = alloc.width; rectangle.height = alloc.height; if (show) show_all(); compute_pop_position (w.get_screen (), rectangle); move(win_x, win_y); set_parent_pop(w.get_toplevel() as Gtk.Window); } public void move_to_coords (int x, int y, bool show = true) { if (show) show_all(); Gdk.Rectangle rect = Gdk.Rectangle (); rect.x = x; rect.y = y; rect.width = 1; rect.height = 1; compute_pop_position (get_screen (), rect); move(win_x, win_y); } /** * Move the popover to the coordinates of the given Gdk.Rectangle and * position it acording to the width and height of the rectangle. */ public void move_to_rect (Gdk.Rectangle rect, bool show = true) { if (show) show_all(); compute_pop_position (get_screen (), rect); move(win_x, win_y); } /** * Move the popover to the Gdk.Window window. The recommand method is * move_to_widget, but this one can be used when we don't know which widget * triggered the action (e.g. with a Gtk.Action). */ public void move_to_window(Gdk.Window window) { int x, y; window.get_root_origin(out x, out y); window.get_origin(out x, out y); x += window.get_width()/2 - MARGIN - SHADOW_SIZE - (int)offset; y += window.get_height() - SHADOW_SIZE; show_all(); show_now(); move(x, y); } protected void cairo_popover (Cairo.Context cr, double x, double y, double width, double height, double border_radius) { // The top half if (arrow_up) { cr.arc (x + border_radius, y + ARROW_HEIGHT + border_radius, border_radius, Math.PI, Math.PI * 1.5); cr.line_to (arrow_offset, y + ARROW_HEIGHT); cr.rel_line_to (ARROW_WIDTH / 2.0, -ARROW_HEIGHT); cr.rel_line_to (ARROW_WIDTH / 2.0, ARROW_HEIGHT); cr.arc (x + width - border_radius, y + ARROW_HEIGHT + border_radius, border_radius, Math.PI * 1.5, Math.PI * 2.0); } else { cr.arc (x + border_radius, y + border_radius, border_radius, Math.PI, Math.PI * 1.5); cr.arc (x + width - border_radius, y + border_radius, border_radius, Math.PI * 1.5, Math.PI * 2.0); } // The bottom half if (arrow_up) { cr.arc (x + width - border_radius, y + height - border_radius, border_radius, 0, Math.PI * 0.5); cr.arc (x + border_radius, y + height - border_radius, border_radius, Math.PI * 0.5, Math.PI); } else { cr.arc (x + width - border_radius, y + height - ARROW_HEIGHT - border_radius, border_radius, 0, Math.PI * 0.5); cr.line_to (arrow_offset + ARROW_WIDTH, y + height - ARROW_HEIGHT); cr.rel_line_to (-ARROW_WIDTH / 2.0, ARROW_HEIGHT); cr.rel_line_to (-ARROW_WIDTH / 2.0, -ARROW_HEIGHT); cr.arc (x + border_radius, y + height - ARROW_HEIGHT - border_radius, border_radius, Math.PI * 0.5, Math.PI); } cr.close_path (); } int old_w = 0; int old_h = 0; void compute_shadow (int w, int h) { main_buffer = new Granite.Drawing.BufferSurface (w, h); // Shadow first cairo_popover (main_buffer.context, SHADOW_SIZE + BORDER_WIDTH / 2.0, SHADOW_SIZE + BORDER_WIDTH / 2.0, w - SHADOW_SIZE * 2 - BORDER_WIDTH, h - SHADOW_SIZE * 2 - BORDER_WIDTH, BORDER_RADIUS); main_buffer.context.set_source_rgba (0.0, 0.0, 0.0, 0.4); main_buffer.context.fill_preserve (); main_buffer.exponential_blur (SHADOW_SIZE / 2 - 1); // rough approximation // Background main_buffer.context.clip (); menu.get_style_context ().render_background (main_buffer.context, 0, 0, w, h); if(get_window () != null) get_window ().input_shape_combine_region (new Cairo.Region.rectangle({0, 0, w - 2*(PADDINGS.right + SHADOW_SIZE), h - 2*(PADDINGS.top + SHADOW_SIZE) - ARROW_HEIGHT}), PADDINGS.right + SHADOW_SIZE, PADDINGS.top + SHADOW_SIZE + (arrow_up ? ARROW_HEIGHT : 0)); // Outer border main_buffer.context.reset_clip (); cairo_popover (main_buffer.context, SHADOW_SIZE + BORDER_WIDTH / 2.0, SHADOW_SIZE + BORDER_WIDTH / 2.0, w - SHADOW_SIZE * 2 - BORDER_WIDTH, h - SHADOW_SIZE * 2 - BORDER_WIDTH, BORDER_RADIUS); main_buffer.context.set_operator (Cairo.Operator.SOURCE); main_buffer.context.set_line_width (BORDER_WIDTH); Gdk.cairo_set_source_rgba (main_buffer.context, get_style_context ().get_border_color (Gtk.StateFlags.NORMAL)); main_buffer.context.stroke (); } void on_size_allocate(Gtk.Allocation alloc) { int w = get_allocated_width(); int h = get_allocated_height(); if(old_w == w && old_h == h) return; compute_shadow (w, h); old_w = w; old_h = h; } public override bool draw(Cairo.Context cr) { cr.set_source_surface(main_buffer.surface, 0, 0); cr.paint_with_alpha(1.0); return base.draw(cr); } }granite-0.3.0/lib/Widgets/widgets-utils.c000644 001750 001750 00000006446 12340443640 022005 0ustar00shnatselshnatsel000000 000000 /* GTK - The GIMP Toolkit * Copyright (C) 2001 CodeFactory AB * Copyright (C) 2001, 2002 Anders Carlsson * Copyright (C) 2003, 2004 Matthias Clasen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Author: Anders Carlsson * * Modified by the GTK+ Team and others 1997-2004. See the AUTHORS * file for a list of people on the GTK+ Team. See the ChangeLog * files for a list of changes. These files are distributed with * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ #include "widgets-utils.h" static void close_cb (GtkWidget *about) { GtkAboutDialogPrivate *priv = about->priv; gtk_widget_hide (about); } /** * gtk_show_about_dialog: * @parent: (allow-none): transient parent, or %NULL for none * @first_property_name: the name of the first property * @Varargs: value of first property, followed by more properties, %NULL-terminated * * This is a convenience function for showing an application's about box. * The constructed dialog is associated with the parent window and * reused for future invocations of this function. * * Since: 2.6 */ void granite_widgets_show_about_dialog (GtkWindow *parent, const gchar *first_property_name, ...) { static GtkWidget *global_about_dialog = NULL; GtkWidget *dialog = NULL; va_list var_args; if (parent) dialog = g_object_get_data (G_OBJECT (parent), "gtk-about-dialog"); else dialog = global_about_dialog; if (!dialog) { //dialog = gtk_about_dialog_new (); dialog = granite_widgets_about_dialog_new (); g_object_ref_sink (dialog); g_signal_connect (dialog, "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), NULL); /* Close dialog on user response */ g_signal_connect (dialog, "response", G_CALLBACK (close_cb), NULL); va_start (var_args, first_property_name); g_object_set_valist (G_OBJECT (dialog), first_property_name, var_args); va_end (var_args); if (parent) { gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE); g_object_set_data_full (G_OBJECT (parent), "gtk-about-dialog", dialog, g_object_unref); } else global_about_dialog = dialog; } gtk_window_present (GTK_WINDOW (dialog)); } granite-0.3.0/lib/Widgets/SidebarPaned.vala000644 001750 001750 00000001771 12340443640 022217 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Granite Developers This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Authored by: Victor Eduardo ***/ [Deprecated (replacement = "Granite.Widgets.ThinPaned", since = "granite-0.2")] public class Granite.Widgets.SidebarPaned : ThinPaned { } granite-0.3.0/lib/Widgets/CellRendererBadge.vala000644 001750 001750 00000011773 12340443640 023172 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2012-2013 Victor Eduardo This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ /** * A badge renderer. * * Informs the user quickly on the content of the corresponding view. For example * it might be used to show how much songs are in a playlist or how much updates * are available. * * {{../../doc/images/cellrendererbadge.png}} * * @since 0.2 */ public class Granite.Widgets.CellRendererBadge : Gtk.CellRenderer { public string text { get; set; default = ""; } private Pango.Rectangle text_logical_rect; private Pango.Layout text_layout; private Gtk.Border margin; private Gtk.Border padding; private Gtk.Border border; public CellRendererBadge () { } public override Gtk.SizeRequestMode get_request_mode () { return Gtk.SizeRequestMode.HEIGHT_FOR_WIDTH; } public override void get_preferred_width (Gtk.Widget widget, out int minimum_size, out int natural_size) { update_layout_properties (widget); int width = text_logical_rect.width; width += margin.left + margin.right; width += padding.left + padding.right; width += border.left + border.right; minimum_size = natural_size = width + 2 * (int) xpad; } public override void get_preferred_height_for_width (Gtk.Widget widget, int width, out int minimum_height, out int natural_height) { update_layout_properties (widget); int height = text_logical_rect.height; height += margin.top + margin.bottom; height += padding.top + padding.bottom; height += border.top + border.bottom; minimum_height = natural_height = height + 2 * (int) ypad; } private void update_layout_properties (Gtk.Widget widget) { var ctx = widget.get_style_context (); ctx.save (); // Add class before creating the pango layout and fetching paddings. // This is needed in order to fetch the proper style information. ctx.add_class (StyleClass.BADGE); var state = ctx.get_state (); margin = ctx.get_margin (state); padding = ctx.get_padding (state); border = ctx.get_border (state); text_layout = widget.create_pango_layout (text); text_layout.set_font_description (ctx.get_font (state)); ctx.restore (); Pango.Rectangle ink_rect; text_layout.get_pixel_extents (out ink_rect, out text_logical_rect); } public override void render (Cairo.Context context, Gtk.Widget widget, Gdk.Rectangle bg_area, Gdk.Rectangle cell_area, Gtk.CellRendererState flags) { update_layout_properties (widget); Gdk.Rectangle aligned_area = get_aligned_area (widget, flags, cell_area); int x = aligned_area.x; int y = aligned_area.y; int width = aligned_area.width; int height = aligned_area.height; // Apply margin x += margin.right; y += margin.top; width -= margin.left + margin.right; height -= margin.top + margin.bottom; var ctx = widget.get_style_context (); ctx.add_class (StyleClass.BADGE); ctx.render_background (context, x, y, width, height); ctx.render_frame (context, x, y, width, height); // Apply border width and padding offsets x += border.right + padding.right; y += border.top + padding.top; width -= border.left + border.right + padding.left + padding.right; height -= border.top + border.bottom + padding.top + padding.bottom; // Center text x += text_logical_rect.x + (width - text_logical_rect.width) / 2; y += text_logical_rect.y + (height - text_logical_rect.height) / 2; ctx.render_layout (context, x, y, text_layout); } [Deprecated (replacement = "Gtk.CellRenderer.get_preferred_size", since = "")] public override void get_size (Gtk.Widget widget, Gdk.Rectangle? cell_area, out int x_offset, out int y_offset, out int width, out int height) { assert_not_reached (); } }granite-0.3.0/lib/Widgets/DynamicNotebook.vala000644 001750 001750 00000123462 12340443640 022765 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Tom Beckmann This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Widgets { // a mask to ignore modifiers like num lock or caps lock that are irrelevant to keyboard shortcuts internal const Gdk.ModifierType MODIFIER_MASK = (Gdk.ModifierType.SHIFT_MASK | Gdk.ModifierType.SUPER_MASK | Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK); public delegate void DroppedDelegate (); private class TabPageContainer : Gtk.EventBox { private weak Tab _tab; public Tab tab { get { return _tab; } } public TabPageContainer (Tab tab) { this._tab = tab; } } /** * This is a standard tab which can be used in a notebook to form a tabbed UI. */ public class Tab : Gtk.EventBox { Gtk.Label _label; public string label { get { return _label.label; } set { _label.label = value; _label.set_tooltip_text (value); } } private bool _pinned = false; public bool pinned { get { return _pinned; } set { if (pinnable) { if (value != _pinned) { if (value) { _label.visible = false; _icon.margin_left = 1; _working.margin_left = 1; } else { _label.visible = true; _icon.margin_left = 0; _working.margin_left = 0; } _pinned = value; update_close_button_visibility (); this.pin_switch (); } } } } private bool _pinnable = true; public bool pinnable { get { return _pinnable; } set { if (!value) { pinned = false; } _pinnable = value; } } /** * Data which will be kept once the tab is deleted, and which will be used by * the application to restore the data into the restored tab. Let it empty if * the tab should not be restored. **/ public string restore_data { get; set; } /** * An optional delegate that is called when the tab is dropped from the set * of restorable tabs in DynamicNotebook. * A tab is dropped either when Clear All is pressed, or when * the tab is the oldest tab in the set of restorable tabs and * the number of restorable tabs has exceeded the upper limit. */ public DroppedDelegate dropped_callback = null; internal TabPageContainer page_container; public Gtk.Widget page { get { return page_container.get_child (); } set { if (page_container.get_child () != null) page_container.remove (page_container.get_child ()); if (value.get_parent () != null) value.reparent (page_container); else page_container.add (value); page_container.show_all (); } } internal Gtk.Image _icon; public GLib.Icon? icon { owned get { return _icon.gicon; } set { _icon.gicon = value; } } Gtk.Spinner _working; bool __working; public bool working { get { return __working; } set { __working = _working.visible = value; _icon.visible = !value; } } public Pango.EllipsizeMode ellipsize_mode { get { return _label.ellipsize; } set { _label.ellipsize = value; } } bool _fixed; [Deprecated (since=0.3)] public bool fixed { get { return _fixed; } set { if (value != _fixed) { _fixed = value; _label.visible = value; } } } public Gtk.Menu menu { get; set; } private bool _closable = true; internal bool closable { set { if (value == _closable) return; _closable = value; update_close_button_visibility (); } } //We need to be able to toggle these from the notebook. internal Gtk.MenuItem new_window_m; internal Gtk.MenuItem duplicate_m; internal Gtk.MenuItem pin_m; private bool _is_current_tab = false; internal bool is_current_tab { set { _is_current_tab = value; update_close_button_visibility (); } } private bool cursor_over_tab = false; private bool cursor_over_close_button = false; private Gtk.Revealer close_button_revealer; internal signal void closed (); internal signal void close_others (); internal signal void new_window (); internal signal void duplicate (); internal signal void pin_switch (); private static const string CLOSE_BUTTON_STYLE = """ * { -GtkButton-default-border : 0; -GtkButton-default-outside-border : 0; -GtkButton-inner-border: 0; -GtkWidget-focus-line-width : 0; -GtkWidget-focus-padding : 0; padding: 0; } """; public Tab (string label="", GLib.Icon? icon=null, Gtk.Widget? page=null) { this._label = new Gtk.Label (label); this._label.hexpand = true; if (icon != null) this._icon = new Gtk.Image.from_gicon (icon, Gtk.IconSize.MENU); else this._icon = new Gtk.Image.from_icon_name ("image-missing", Gtk.IconSize.MENU); this._working = new Gtk.Spinner (); _working.start(); var close_button = new Gtk.Button (); close_button.add (new Gtk.Image.from_icon_name ("window-close-symbolic", Gtk.IconSize.MENU)); close_button.tooltip_text = _("Close Tab"); close_button.relief = Gtk.ReliefStyle.NONE; fix_button_theming (close_button); close_button_revealer = new Gtk.Revealer (); close_button_revealer.transition_type = Gtk.RevealerTransitionType.CROSSFADE; close_button_revealer.add (close_button); var tab_layout = new Gtk.Grid (); tab_layout.hexpand = false; tab_layout.orientation = Gtk.Orientation.HORIZONTAL; tab_layout.add (close_button_revealer); tab_layout.add (_label); tab_layout.add (_icon); tab_layout.add (_working); _label.set_tooltip_text (label); _label.ellipsize = Pango.EllipsizeMode.END; _icon.set_size_request (16, 16); _working.set_size_request (16, 16); this.visible_window = true; // Apply transparent background color to the tab. // We do this instead of visible_window=false for event-propagation reasons. // Otherwise the EventBox would not catch some events in blank areas, like // enter_notify_event and leave_notify_event. above_child=true is not an option. override_background_color (0, {0, 0, 0, 0}); this.add (tab_layout); page_container = new TabPageContainer (this); this.page = page ?? new Gtk.Label(""); restore_data = ""; this.show_all (); menu = new Gtk.Menu (); var close_m = new Gtk.MenuItem.with_label (_("Close Tab")); var close_other_m = new Gtk.MenuItem.with_label (""); pin_m = new Gtk.MenuItem.with_label (""); new_window_m = new Gtk.MenuItem.with_label (_("Open in a new Window")); duplicate_m = new Gtk.MenuItem.with_label (_("Duplicate")); menu.append (close_other_m); menu.append (close_m); menu.append (new_window_m); menu.append (duplicate_m); menu.append (pin_m); menu.show_all (); close_m.activate.connect (() => closed () ); close_other_m.activate.connect (() => close_others () ); new_window_m.activate.connect (() => new_window () ); duplicate_m.activate.connect (() => duplicate () ); pin_m.activate.connect (() => pinned = !pinned); this.scroll_event.connect ((e) => { var notebook = (this.get_parent () as Gtk.Notebook); switch (e.direction) { case Gdk.ScrollDirection.UP: case Gdk.ScrollDirection.LEFT: if (notebook.page > 0) { notebook.page--; return true; } break; case Gdk.ScrollDirection.DOWN: case Gdk.ScrollDirection.RIGHT: if (notebook.page < notebook.get_n_pages ()) { notebook.page++; return true; } break; } return false; }); this.button_press_event.connect ((e) => { e.state &= MODIFIER_MASK; if (e.button == 2 && e.state == 0 && close_button_is_visible ()) { this.closed (); } else if (e.button == 2 && e.state == Gdk.ModifierType.SHIFT_MASK && close_button_is_visible ()) { this.close_others (); } else if (e.button == 1 && e.type == Gdk.EventType.2BUTTON_PRESS && duplicate_m.visible) { this.duplicate (); } else if (e.button == 3) { menu.popup (null, null, null, 3, e.time); uint num_tabs = (this.get_parent () as Gtk.Container).get_children ().length (); close_other_m.label = ngettext (_("Close Other Tab"), _("Close Other Tabs"), num_tabs - 1); close_other_m.sensitive = (num_tabs != 1); pin_m.label = "Pin"; if (this.pinned) { pin_m.label = "Unpin"; } } else { return false; } return true; }); this.enter_notify_event.connect ((e) => { cursor_over_tab = true; update_close_button_visibility (); return false; }); this.leave_notify_event.connect ((e) => { // We don't want to handle leave_notify events without a prior enter_notify // for event parity reasons. if (!cursor_over_tab) return false; cursor_over_tab = false; update_close_button_visibility (); return false; }); // Hovering the close button area causes a leave_notify_event on the tab EventBox. // Because of that we need to watch the events from those widgets independently // to avoid misbehavior. While setting "above_child" to "true" on the tab might // appear to be a more proper solution, that wouldn't let us capture any event // (e.g. button_press) on the button. close_button.enter_notify_event.connect ((e) => { cursor_over_close_button = true; update_close_button_visibility (); return false; }); close_button.leave_notify_event.connect ((e) => { // We don't want to handle leave_notify events without a prior enter_notify // for event parity reasons. if (!cursor_over_close_button) return false; cursor_over_close_button = false; update_close_button_visibility (); return false; }); page_container.button_press_event.connect (() => { return true; }); //dont let clicks pass through close_button.clicked.connect (() => this.closed ()); working = false; update_close_button_visibility (); } public void close () { closed (); } internal static void fix_button_theming (Gtk.Widget button) { Utils.set_theming (button, CLOSE_BUTTON_STYLE, null, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); } private void update_close_button_visibility () { // If the tab is pinned, we don't want the revealer to keep // the size allocation of the close button. close_button_revealer.no_show_all = _pinned; close_button_revealer.visible = !_pinned; close_button_revealer.reveal_child = _closable && !_pinned && (cursor_over_tab || cursor_over_close_button || _is_current_tab); } private bool close_button_is_visible () { return close_button_revealer.visible && close_button_revealer.child_revealed; } } private class ClosedTabs : GLib.Object { public signal void restored (string label, string restore_data, GLib.Icon? icon); public signal void cleared (); private int _max_restorable_tabs = 10; public int max_restorable_tabs { get { return _max_restorable_tabs; } set { assert (value > 0); _max_restorable_tabs = value; } } internal struct Entry { string label; string restore_data; GLib.Icon? icon; DroppedDelegate? dropped_callback; } private Gee.LinkedList closed_tabs; public ClosedTabs () { closed_tabs = new Gee.LinkedList (); } public bool empty { get { return closed_tabs.size == 0; } } public void push (Tab tab) { foreach (var entry in closed_tabs) if (tab.restore_data == entry.restore_data) return; // Insert the element at the end of the list. Entry e = { tab.label, tab.restore_data, tab.icon, tab.dropped_callback }; closed_tabs.add (e); // If the maximum size is exceeded, remove from the beginning of the list. if (closed_tabs.size > max_restorable_tabs) { var elem = closed_tabs.poll_head (); var dropped_callback = elem.dropped_callback; if (dropped_callback != null) dropped_callback (); } } public Entry pop () { assert (closed_tabs.size > 0); return closed_tabs.poll_tail (); } public Entry pick (string search) { Entry picked = {null, null, null}; for (int i = 0; i < closed_tabs.size; i++) { var entry = closed_tabs[i]; if (entry.restore_data == search) { picked = closed_tabs.remove_at (i); break; } } return picked; } public Gtk.Menu menu { owned get { var _menu = new Gtk.Menu (); foreach (var entry in closed_tabs) { var item = new Gtk.ImageMenuItem.with_label (entry.label); item.set_always_show_image (true); if (entry.icon != null) { var icon = new Gtk.Image.from_gicon (entry.icon, Gtk.IconSize.MENU); item.set_image (icon); } _menu.prepend (item); item.activate.connect (() => { var e = pick (entry.restore_data); this.restored (e.label, e.restore_data, e.icon); }); } if (!empty) { var separator = new Gtk.SeparatorMenuItem (); var item = new Gtk.MenuItem.with_label (_("Clear All")); _menu.append (separator); _menu.append (item); item.activate.connect (() => { foreach (var entry in closed_tabs) { if (entry.dropped_callback != null) { entry.dropped_callback (); } } closed_tabs.clear (); cleared (); }); } return _menu; } } } /** * Tab bar widget designed for a variable number of tabs. * Supports showing a "New tab" button, restoring closed tabs, "pinning" tabs, and more. * * {{../../doc/images/DynamicNotebook.png}} */ public class DynamicNotebook : Gtk.EventBox { /** * number of pages */ public int n_tabs { get { return notebook.get_n_pages (); } } /** * Hide the tab bar and only show the pages */ public bool show_tabs { get { return notebook.show_tabs; } set { notebook.show_tabs = value; } } /** * Toggle icon display */ bool _show_icons; public bool show_icons { get { return _show_icons; } set { if (_show_icons != value) { tabs.foreach ((t) => t._icon.visible = (value && !t.working)); } _show_icons = value; } } /** * Hide the close buttons and disable closing of tabs */ bool _tabs_closable = true; public bool tabs_closable { get { return _tabs_closable; } set { if (value != _tabs_closable) tabs.foreach ((t) => { t.closable = value; }); _tabs_closable = value; } } /** * Make tabs reorderable */ bool _allow_drag = true; public bool allow_drag { get { return _allow_drag; } set { _allow_drag = value; this.tabs.foreach ((t) => { notebook.set_tab_reorderable (t.page_container, value); }); } } /** * Allow creating new windows by dragging a tab out */ bool _allow_new_window = false; public bool allow_new_window { get { return _allow_new_window; } set { _allow_new_window = value; this.tabs.foreach ((t) => { notebook.set_tab_detachable (t.page_container, value); }); } } /** * Allow duplicating tabs */ bool _allow_duplication = false; public bool allow_duplication { get { return _allow_duplication; } set { _allow_duplication = value; foreach (var tab in tabs) { tab.duplicate_m.visible = value; } } } /** * Allow restoring tabs */ bool _allow_restoring = false; public bool allow_restoring { get { return _allow_restoring; } set { _allow_restoring = value; restore_tab_m.visible = value; restore_button.visible = value; } } /** * Set or get the upper limit of the size of the set * of restorable tabs. */ public int max_restorable_tabs { get { return closed_tabs.max_restorable_tabs; } set { closed_tabs.max_restorable_tabs = value; } } /** * Controls the '+' add button visibility */ bool _add_button_visible = true; public bool add_button_visible { get { return _add_button_visible; } set { if (value != _add_button_visible) { if (_add_button_visible) { this.notebook.set_action_widget (null, Gtk.PackType.START); } else { this.notebook.set_action_widget (add_button, Gtk.PackType.START); } _add_button_visible = value; } } } bool _allow_pinning = false; public bool allow_pinning { get { return _allow_pinning; } set { _allow_pinning = value; foreach (var tab in tabs) { tab.pinnable = value; } } } bool _force_left = true; public bool force_left { get { return _force_left; } set { _force_left = value; } } /** * The text shown in the add button tooltip */ public string add_button_tooltip { get { return add_button.tooltip_text; } set { add_button.tooltip_text = value; } } public Tab current { get { return tabs.nth_data (notebook.get_current_page ()); } set { notebook.set_current_page (tabs.index (value)); } } GLib.List _tabs; public GLib.List tabs { get { _tabs = new GLib.List (); for (var i = 0; i < n_tabs; i++) { _tabs.append (notebook.get_tab_label (notebook.get_nth_page (i)) as Tab); } return _tabs; } } public string group_name { get { return notebook.group_name; } set { notebook.group_name = value; } } public enum TabBarBehavior { ALWAYS = 0, SINGLE = 1, NEVER = 2 } /** * The behavior of the tab bar and its visibility */ public TabBarBehavior tab_bar_behavior { set { _tab_bar_behavior = value; update_tabs_visibility (); } get { return _tab_bar_behavior; } } private TabBarBehavior _tab_bar_behavior; /** * The menu appearing when the notebook is clicked on a blank space */ public Gtk.Menu menu { get; private set; } private ClosedTabs closed_tabs; Gtk.Notebook notebook; private int tab_width = 150; private static const int MAX_TAB_WIDTH = 150; private static const int TAB_WIDTH_PINNED = 18; public signal void tab_added (Tab tab); public signal void tab_removed (Tab tab); private Tab? old_tab; //stores a reference for tab_switched public signal void tab_switched (Tab? old_tab, Tab new_tab); public signal void tab_reordered (Tab tab, int new_pos); public signal void tab_moved (Tab tab, int x, int y); public signal void tab_duplicated (Tab duplicated_tab); public signal void tab_restored (string label, string data, GLib.Icon? icon); public signal void new_tab_requested (); public signal bool close_tab_requested (Tab tab); private Gtk.MenuItem new_tab_m; private Gtk.MenuItem restore_tab_m; private Gtk.Button add_button; private Gtk.Button restore_button; // should be a Gtk.MenuButton when we have Gtk+ 3.6 private static const int ADD_BUTTON_PADDING = 5; // Padding around the new tab button /** * Create a new dynamic notebook */ public DynamicNotebook () { this.notebook = new Gtk.Notebook (); this.visible_window = false; this.get_style_context ().add_class ("dynamic-notebook"); this.notebook.scrollable = true; this.notebook.show_border = false; _tab_bar_behavior = TabBarBehavior.ALWAYS; this.draw.connect ( (ctx) => { this.get_style_context ().render_activity (ctx, 0, 0, this.get_allocated_width (), 27); return false; }); this.add (this.notebook); menu = new Gtk.Menu (); new_tab_m = new Gtk.MenuItem.with_label (_("New Tab")); restore_tab_m = new Gtk.MenuItem.with_label (_("Undo Close Tab")); restore_tab_m.sensitive = false; menu.append (new_tab_m); menu.append (restore_tab_m); menu.show_all (); new_tab_m.activate.connect (() => { new_tab_requested (); }); restore_tab_m.activate.connect (() => { restore_last_tab (); }); closed_tabs = new ClosedTabs (); closed_tabs.restored.connect ((label, restore_data, icon) => { if (!allow_restoring) return; restore_button.sensitive = !closed_tabs.empty; restore_tab_m.sensitive = !closed_tabs.empty; this.tab_restored (label, restore_data, icon); }); closed_tabs.cleared.connect (() => { restore_button.sensitive = false; restore_tab_m.sensitive = false; }); Gtk.Box add_button_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); add_button = new Gtk.Button (); add_button.add (new Gtk.Image.from_icon_name ("list-add-symbolic", Gtk.IconSize.MENU)); add_button.relief = Gtk.ReliefStyle.NONE; add_button.tooltip_text = _("New Tab"); Tab.fix_button_theming (add_button); add_button_box.pack_start (add_button, false, false, ADD_BUTTON_PADDING); add_button_box.show_all (); this.notebook.set_action_widget (add_button_box, Gtk.PackType.START); restore_button = new Gtk.Button (); restore_button.add (new Gtk.Image.from_icon_name ("document-open-recent-symbolic", Gtk.IconSize.MENU)); restore_button.margin_right = 5; restore_button.set_relief (Gtk.ReliefStyle.NONE); restore_button.tooltip_text = _("Closed Tabs"); restore_button.sensitive = false; this.notebook.set_action_widget (restore_button, Gtk.PackType.END); restore_button.show_all (); add_button.clicked.connect (() => { new_tab_requested (); }); add_button.button_press_event.connect ((e) => { // Consume double-clicks return e.type == Gdk.EventType.2BUTTON_PRESS && e.button == 1; }); restore_button.clicked.connect (() => { var menu = closed_tabs.menu; menu.attach_widget = restore_button; menu.show_all (); menu.popup (null, null, this.restore_menu_position, 1, 0); }); restore_tab_m.visible = allow_restoring; restore_button.visible = allow_restoring; this.size_allocate.connect (() => { this.recalc_size (); }); this.button_press_event.connect ((e) => { if (e.type == Gdk.EventType.2BUTTON_PRESS && e.button == 1) { new_tab_requested (); } else if (e.button == 2 && allow_restoring) { restore_last_tab (); return true; } else if (e.button == 3) { menu.popup (null, null, null, 3, e.time); } return false; }); this.key_press_event.connect ((e) => { e.state &= MODIFIER_MASK; switch (e.keyval) { case Gdk.Key.@w: case Gdk.Key.@W: if (e.state == Gdk.ModifierType.CONTROL_MASK) { if (!tabs_closable) break; remove_tab (current); return true; } break; case Gdk.Key.@t: case Gdk.Key.@T: if (e.state == Gdk.ModifierType.CONTROL_MASK) { new_tab_requested (); return true; } else if (e.state == (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK) && allow_restoring) { restore_last_tab (); return true; } break; case Gdk.Key.Page_Up: if (e.state == Gdk.ModifierType.CONTROL_MASK) { next_page (); return true; } break; case Gdk.Key.Page_Down: if (e.state == Gdk.ModifierType.CONTROL_MASK) { previous_page (); return true; } break; case Gdk.Key.@1: case Gdk.Key.@2: case Gdk.Key.@3: case Gdk.Key.@4: case Gdk.Key.@5: case Gdk.Key.@6: case Gdk.Key.@7: case Gdk.Key.@8: if ((e.state & Gdk.ModifierType.MOD1_MASK) == Gdk.ModifierType.MOD1_MASK) { var i = e.keyval - 49; var n_pages = notebook.get_n_pages (); notebook.page = (int) ((i >= n_pages) ? n_pages - 1 : i); return true; } break; case Gdk.Key.@9: if ((e.state & Gdk.ModifierType.MOD1_MASK) == Gdk.ModifierType.MOD1_MASK) { notebook.page = notebook.get_n_pages () - 1; return true; } break; } return false; }); notebook.switch_page.connect (on_switch_page); notebook.page_added.connect (on_page_added); notebook.page_removed.connect (on_page_removed); notebook.page_reordered.connect (on_page_reordered); notebook.create_window.connect (on_create_window); } ~Notebook () { notebook.switch_page.disconnect (on_switch_page); notebook.page_added.disconnect (on_page_added); notebook.page_removed.disconnect (on_page_removed); notebook.page_reordered.disconnect (on_page_reordered); notebook.create_window.disconnect (on_create_window); } void restore_menu_position (Gtk.Menu menu, out int x, out int y, out bool p) { Gtk.Allocation button_alloc, menu_alloc; restore_button.get_allocation (out button_alloc); menu.get_allocation (out menu_alloc); restore_button.get_window ().get_origin (out x, out y); x += button_alloc.x - menu_alloc.width + button_alloc.width + 5; y += button_alloc.y + button_alloc.height + 1; } void on_switch_page (Gtk.Widget page, uint pagenum) { var new_tab = (page as TabPageContainer).tab; // update property accordingly for previous selected tab if (old_tab != null) old_tab.is_current_tab = false; // now set the new tab as current new_tab.is_current_tab = true; tab_switched (old_tab, new_tab); old_tab = new_tab; } void on_page_added (Gtk.Widget page, uint pagenum) { var t = (page as TabPageContainer).tab; insert_callbacks (t); tab_added (t); update_tabs_visibility (); } void on_page_removed (Gtk.Widget page, uint pagenum) { var t = (page as TabPageContainer).tab; remove_callbacks (t); tab_removed (t); update_tabs_visibility (); } void on_page_reordered (Gtk.Widget page, uint pagenum) { tab_reordered ((page as TabPageContainer).tab, (int) pagenum); recalc_order (); } unowned Gtk.Notebook on_create_window (Gtk.Widget page, int x, int y) { var tab = notebook.get_tab_label (page) as Tab; tab_moved (tab, x, y); recalc_order (); return (Gtk.Notebook) null; } private void recalc_order () { if (n_tabs == 0 || !force_left) return; var pinned_tabs = 0; for (var i = 0; i < this.notebook.get_n_pages (); i++) { if ((this.notebook.get_tab_label (this.notebook.get_nth_page (i)) as Tab).pinned) { pinned_tabs++; } } for (var p = 0; p < pinned_tabs; p++) { int sel = p; for (var i = p; i < this.notebook.get_n_pages (); i++) { if ((this.notebook.get_tab_label (this.notebook.get_nth_page (i)) as Tab).pinned) { sel = i; break; } } if (sel != p) { this.notebook.reorder_child (this.notebook.get_nth_page (sel), p); } } } private void recalc_size () { if (n_tabs == 0) return; var pinned_tabs = 0; var unpinned_tabs = 0; for (var i = 0; i < this.notebook.get_n_pages (); i++) { if ((this.notebook.get_tab_label (this.notebook.get_nth_page (i)) as Tab).pinned) { pinned_tabs++; } else { unpinned_tabs++; } } if (unpinned_tabs == 0) { unpinned_tabs = 1; } var offset = 130; this.tab_width = (this.get_allocated_width () - offset - pinned_tabs * TAB_WIDTH_PINNED) / unpinned_tabs; if (tab_width > MAX_TAB_WIDTH) tab_width = MAX_TAB_WIDTH; if (tab_width < 0) tab_width = 0; for (var i = 0; i < this.notebook.get_n_pages (); i++) { this.notebook.get_tab_label (this.notebook.get_nth_page (i)).width_request = tab_width; if ((this.notebook.get_tab_label (this.notebook.get_nth_page (i)) as Tab).pinned) { this.notebook.get_tab_label (this.notebook.get_nth_page (i)).width_request = TAB_WIDTH_PINNED; } } this.notebook.resize_children (); } private void restore_last_tab () { if (!allow_restoring || closed_tabs.empty) return; var restored = closed_tabs.pop (); restore_button.sensitive = !closed_tabs.empty; restore_tab_m.sensitive = !closed_tabs.empty; this.tab_restored (restored.label, restored.restore_data, restored.icon); } private void switch_pin_tab (Tab tab) { if (!allow_pinning) { return; } var pin_state = !tab.pinned; if (pin_state) { tab._icon.visible = !tab.working; tab.closable = tabs_closable; } else { tab._icon.visible = show_icons && !tab.working; } recalc_order (); recalc_size (); } public void remove_tab (Tab tab) { var pos = get_tab_position (tab); if (pos != -1) notebook.remove_page (pos); } public void next_page () { this.notebook.page = this.notebook.page + 1 >= this.notebook.get_n_pages () ? this.notebook.page = 0 : this.notebook.page + 1; } public void previous_page () { this.notebook.page = this.notebook.page - 1 < 0 ? this.notebook.page = this.notebook.get_n_pages () - 1 : this.notebook.page - 1; } public override void show () { base.show (); notebook.show (); } public new List get_children () { var list = new List (); foreach (var child in notebook.get_children ()) { list.append ((child as Gtk.Container).get_children ().nth_data (0)); } return list; } public int get_tab_position (Tab tab) { return this.notebook.page_num (tab.page_container); } public void set_tab_position (Tab tab, int position) { notebook.reorder_child (tab.page_container, position); tab_reordered (tab, position); recalc_order (); } public Tab? get_tab_by_index (int index) { return notebook.get_tab_label (notebook.get_nth_page (index)) as Tab; } public Tab? get_tab_by_widget (Gtk.Widget widget) { return notebook.get_tab_label (widget.get_parent ()) as Tab; } public Gtk.Widget get_nth_page (int index) { return notebook.get_nth_page (index); } public uint insert_tab (Tab tab, int index) { return_if_fail (tabs.index (tab) < 0); var i = 0; if (index == -1) i = this.notebook.insert_page (tab.page_container, tab, this.notebook.get_n_pages ()); else i = this.notebook.insert_page (tab.page_container, tab, index); this.notebook.set_tab_reorderable (tab.page_container, this.allow_drag); this.notebook.set_tab_detachable (tab.page_container, this.allow_new_window); tab._icon.visible = show_icons && !tab.working; tab.duplicate_m.visible = allow_duplication; tab.new_window_m.visible = allow_new_window; tab.pin_m.visible = allow_pinning; tab.pinnable = allow_pinning; tab.pinned = false; tab.width_request = tab_width; this.recalc_size (); this.recalc_order (); if (!tabs_closable) tab.closable = false; return i; } private void insert_callbacks (Tab tab) { tab.closed.connect (on_tab_closed); tab.close_others.connect (on_close_others); tab.new_window.connect (on_new_window); tab.duplicate.connect (on_duplicate); tab.pin_switch.connect (on_pin_switch); } private void remove_callbacks (Tab tab) { tab.closed.disconnect (on_tab_closed); tab.close_others.disconnect (on_close_others); tab.new_window.disconnect (on_new_window); tab.duplicate.disconnect (on_duplicate); tab.pin_switch.disconnect (on_pin_switch); } private void on_tab_closed (Tab tab) { if (Signal.has_handler_pending (this, Signal.lookup ("close-tab-requested", typeof (DynamicNotebook)), 0, true)) { var sure = close_tab_requested (tab); if (!sure) return; } var pos = get_tab_position (tab); remove_tab (tab); if (pos != -1 && tab.page.get_parent () != null) tab.page.unparent (); if (tab.label != "" && tab.restore_data != "") { closed_tabs.push (tab); restore_button.sensitive = !closed_tabs.empty; restore_tab_m.sensitive = !closed_tabs.empty; } } private void on_close_others (Tab tab) { var num = 0; //save num, in case a tab refused to close so we don't end up in an infinite loop for (var j = 0; j < tabs.length (); j++) { if (tab != tabs.nth_data (j)) { tabs.nth_data (j).closed (); if (num == n_tabs) break; j--; } num = n_tabs; } } private void on_new_window (Tab tab) { notebook.create_window (tab.page_container, 0, 0); } private void on_duplicate (Tab tab) { tab_duplicated (tab); } private void on_pin_switch (Tab tab) { switch_pin_tab (tab); } private void update_tabs_visibility () { if (_tab_bar_behavior == TabBarBehavior.SINGLE) notebook.show_tabs = n_tabs > 1; else if (_tab_bar_behavior == TabBarBehavior.NEVER) notebook.show_tabs = false; else if (_tab_bar_behavior == TabBarBehavior.ALWAYS) notebook.show_tabs = true; } } } granite-0.3.0/lib/Widgets/close-button.c000644 001750 001750 00000024673 12340443640 021621 0ustar00shnatselshnatsel000000 000000 /*FIXME inline pixbuf image data for close button. not sure if it would be better to put it in some data folder*/ #include #include #ifdef __SUNPRO_C #pragma align 4 (close) #endif #ifdef __GNUC__ static const guint8 close_button_data[] __attribute__ ((__aligned__ (4))) = #else static const guint8 close_button_data[] = #endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (3600) */ "\0\0\16(" /* pixdata_type (0x1010002) */ "\1\1\0\2" /* rowstride (120) */ "\0\0\0x" /* width (30) */ "\0\0\0\36" /* height (30) */ "\0\0\0\36" /* pixel_data: */ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0" "\0\2\0\0\0\2@@@\4""333\5+++\6$$$\7\213\213\213\13\225\225\225\14+++\6" "+++\6""333\5@@@\4\0\0\0\2\0\0\0\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\1\0\0\0\3\0\0\0\5\0\0\0\10'''\15hhh\26\217\217\217\40\207\207" "\207$mmm#\216\216\2164\231\231\2317555\35aaa\35\200\200\200\34aaa\25" "\25\25\25\14\0\0\0\10\0\0\0\5\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\4\0\0" "\0\7\25\25\25\14FFF\26\221\221\221,\276\276\276J\353\353\353\211\372" "\372\372\307\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\373\373\373\317\356\356\356\232\275\275\275MRRR\37\34\34\34" "\22\25\25\25\14\0\0\0\7\0\0\0\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\4\0\0\0\11\40\40\40\20UUU\36" "\235\235\235<\363\363\363\255\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\350\350\350\375\340\340\340\375\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\361\361\361\250" "'''!111\32\21\21\21\17\0\0\0\11\0\0\0\4\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\12\34\34\34\22\\\\\\$\261\261" "\261N\375\375\375\340\377\377\377\377\372\372\372\376\231\231\231\372" "FFF\366\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363555\365\215\215\215\372" "\367\367\367\376\377\377\377\377\372\372\372\320\275\275\275Y333\36\17" "\17\17\21\0\0\0\12\0\0\0\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0" "\0\0\4\0\0\0\11\16\16\16\22GGG$\252\252\252Q\377\377\377\371\377\377" "\377\377\271\271\271\374\37\37\37\364\0\0\0\363\0\0\0\363\0\0\0\363\0" "\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363(((\365\314\314\314\374" "\377\377\377\377\377\377\377\377\271\271\271[(((\40\17\17\17\21\0\0\0" "\11\0\0\0\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\7\0\0\0\17...!\212" "\212\212H\374\374\374\341\377\377\377\377\237\237\237\372\3\3\3\363\0" "\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363" "\0\0\0\363\0\0\0\363\0\0\0\363\3\3\3\363\205\205\205\371\377\377\377" "\377\377\377\377\377\227\227\227Q\32\32\32\35\0\0\0\17\0\0\0\7\0\0\0" "\3\0\0\0\1\0\0\0\1\0\0\0\5\0\0\0\14\24\24\24\32jjj<\356\356\356\264\377" "\377\377\377\271\271\271\374\3\3\3\363\0\0\0\363\0\0\0\363\0\0\0\363" "\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363" "\0\0\0\363\0\0\0\363\0\0\0\363\226\226\226\372\377\377\377\377\363\363" "\363\306\0\0\0*\0\0\0\30\0\0\0\14\0\0\0\5\0\0\0\2\0\0\0\2\0\0\0\10\16" "\16\16\22>>>)\240\240\240a\377\377\377\377\365\365\365\375\34\34\34\364" "\0\0\0\363\0\0\0\363\0\0\0\363222\365;;;\366\0\0\0\363\0\0\0\363\0\0" "\0\363\0\0\0\363\26\26\26\364ccc\370\12\12\12\363\0\0\0\363\0\0\0\363" "\6\6\6\363\345\345\345\373\377\377\377\377\301\301\301\177\34\34\34%" "\0\0\0\22\0\0\0\10\0\0\0\3\0\0\0\2\0\0\0\13\12\12\12\32UUU<\337\337\337" "\241\377\377\377\377\223\223\223\372\0\0\0\363\0\0\0\363\0\0\0\363,," ",\365\377\377\377\377\377\377\377\377\201\201\201\371\0\0\0\363\0\0\0" "\363\"\"\"\365\345\345\345\376\377\377\377\377\231\231\231\372\0\0\0" "\363\0\0\0\363\0\0\0\363fff\370\377\377\377\377\354\354\354\277\0\0\0" ".\0\0\0\31\0\0\0\14\0\0\0\4\0\0\0\3\0\0\0\17\17\17\17\"JJJH\366\366\366" "\320\377\377\377\377888\366\0\0\0\363\0\0\0\363\0\0\0\363\37\37\37\364" "\366\366\366\377\377\377\377\377\377\377\377\377\201\201\201\371%%%\365" "\345\345\345\376\377\377\377\377\377\377\377\377\213\213\213\371\0\0" "\0\363\0\0\0\363\0\0\0\363\23\23\23\364\374\374\374\377\377\377\377\377" "\20\20\20>\0\0\0!\0\0\0\20\0\0\0\6\0\0\0\4\0\0\0\23\27\27\27,OOOZ\377" "\377\377\377\362\362\362\375\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363" "\0\0\0\363KKK\366\366\366\366\377\377\377\377\377\377\377\377\377\362" "\362\362\376\377\377\377\377\377\377\377\377\256\256\256\373\3\3\3\363" "\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\321\321\321\371\377\377\377" "\377wwwm\15\15\15(\0\0\0\24\0\0\0\10\0\0\0\5\14\14\14\26+++5dddn\377" "\377\377\377\332\332\332\374\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363" "\0\0\0\363\0\0\0\363KKK\366\370\370\370\377\377\377\377\377\377\377\377" "\377\377\377\377\377\256\256\256\373\3\3\3\363\0\0\0\363\0\0\0\363\0" "\0\0\363\0\0\0\363\0\0\0\363\262\262\262\371\377\377\377\377\227\227" "\227\211\13\13\13/\0\0\0\27\0\0\0\11\0\0\0\5\12\12\12\31,,,:aaav\377" "\377\377\377\325\325\325\374\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363" "\0\0\0\363\0\0\0\363(((\365\354\354\354\376\377\377\377\377\377\377\377" "\377\377\377\377\377\202\202\202\371\0\0\0\363\0\0\0\363\0\0\0\363\0" "\0\0\363\0\0\0\363\0\0\0\363\257\257\257\371\377\377\377\377\225\225" "\225\220\0\0\0""2\0\0\0\32\0\0\0\13\0\0\0\5\0\0\0\32\26\26\26:===m\377" "\377\377\377\355\355\355\374\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363" "\0\0\0\363(((\365\350\350\350\376\377\377\377\377\377\377\377\377\374" "\374\374\377\377\377\377\377\377\377\377\377\201\201\201\371\0\0\0\363" "\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\311\311\311\367\377\377\377" "\377uuu\203\11\11\11""6\0\0\0\33\0\0\0\13\0\0\0\5\0\0\0\32\5\5\5""7!" "!!c\372\372\372\352\377\377\377\377\34\34\34\364\0\0\0\363\0\0\0\363" "\0\0\0\363\17\17\17\364\350\350\350\376\377\377\377\377\377\377\377\377" "\256\256\256\373MMM\366\366\366\366\377\377\377\377\377\377\377\377\377" "lll\370\0\0\0\363\0\0\0\363\0\0\0\363\3\3\3\363\361\361\361\373\377\377" "\377\377...i\5\5\5""6\0\0\0\33\0\0\0\13\0\0\0\5\0\0\0\31\5\5\5""5+++" "_\335\335\335\302\377\377\377\377ooo\370\0\0\0\363\0\0\0\363\0\0\0\363" "888\366\377\377\377\377\377\377\377\377\256\256\256\373\3\3\3\363\0\0" "\0\363KKK\366\366\366\366\377\377\377\377\377\252\252\252\373\0\0\0\363" "\0\0\0\363\0\0\0\363FFF\366\377\377\377\377\350\350\350\323\0\0\0Y\0" "\0\0""3\0\0\0\32\0\0\0\13\0\0\0\5\0\0\0\26\5\5\5""0&&&W\216\216\216\234" "\377\377\377\377\350\350\350\373\12\12\12\363\0\0\0\363\0\0\0\363\0\0" "\0\363fff\370lll\370\3\3\3\363\0\0\0\363\0\0\0\363\0\0\0\363555\365\201" "\201\201\371\34\34\34\364\0\0\0\363\0\0\0\363\0\0\0\363\302\302\302\365" "\377\377\377\377\263\263\263\263\0\0\0R\0\0\0/\0\0\0\27\0\0\0\11\0\0" "\0\4\0\0\0\23\0\0\0)\7\7\7J\34\34\34v\345\345\345\317\377\377\377\377" "\213\213\213\371\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0" "\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363" "\0\0\0\363\0\0\0\363```\367\377\377\377\377\363\363\363\346\23\23\23" "w\0\0\0H\0\0\0)\0\0\0\24\0\0\0\10\0\0\0\3\0\0\0\17\0\0\0!\4\4\4=\22\22" "\22cddd\231\377\377\377\377\377\377\377\377```\367\0\0\0\363\0\0\0\363" "\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363" "\0\0\0\363\0\0\0\363\0\0\0\363;;;\366\373\373\373\375\377\377\377\377" "\225\225\225\257\0\0\0a\0\0\0=\0\0\0!\0\0\0\20\0\0\0\6\0\0\0\2\0\0\0" "\13\0\0\0\31\0\0\0""0\3\3\3Q\27\27\27x\226\226\226\255\377\377\377\377" "\377\377\377\377~~~\371\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0" "\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363]]]\367\370\370" "\370\375\377\377\377\377\305\305\305\312\0\0\0v\0\0\0O\0\0\0""0\0\0\0" "\31\0\0\0\14\0\0\0\4\0\0\0\2\0\0\0\10\0\0\0\22\0\0\0$\0\0\0>\3\3\3_\21" "\21\21\204\223\223\223\261\377\377\377\377\377\377\377\377\330\330\330" "\370WWW\367\12\12\12\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0\0\363\0\0" "\0\363FFF\366\307\307\307\366\377\377\377\377\377\377\377\377\305\305" "\305\316\0\0\0\203\0\0\0^\0\0\0>\0\0\0$\0\0\0\22\0\0\0\10\0\0\0\3\0\0" "\0\1\0\0\0\5\0\0\0\14\0\0\0\30\0\0\0,\0\0\0G\3\3\3f\17\17\17\210hhh\261" "\344\344\344\332\377\377\377\377\377\377\377\377\370\370\370\375\321" "\321\321\371\235\235\235\370\235\235\235\370\313\313\313\370\361\361" "\361\373\377\377\377\377\377\377\377\377\355\355\355\345\214\214\214" "\277\0\0\0\210\0\0\0f\0\0\0G\0\0\0,\0\0\0\30\0\0\0\14\0\0\0\5\0\0\0\2" "\0\0\0\0\0\0\0\3\0\0\0\7\0\0\0\17\0\0\0\35\0\0\0""1\0\0\0J\3\3\3f\12" "\12\12\203\0\0\0\236\220\220\220\304\334\334\334\330\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\341\341\341\335\237\237\237\312\5\5\5\237\0\0\0\203\0\0" "\0f\0\0\0J\0\0\0""1\0\0\0\35\0\0\0\17\0\0\0\7\0\0\0\3\0\0\0\1\0\0\0\0" "\0\0\0\1\0\0\0\4\0\0\0\11\0\0\0\21\0\0\0\36\0\0\0""0\0\0\0G\0\0\0^\0" "\0\0v\11\11\11\214\0\0\0\236\17\17\17\256CCC\303{{{\324{{{\324JJJ\305" "\33\33\33\261\0\0\0\236\0\0\0\214\0\0\0v\0\0\0^\0\0\0G\0\0\0""0\0\0\0" "\36\0\0\0\21\0\0\0\11\0\0\0\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\0\0\0\4\0\0\0\12\0\0\0\21\0\0\0\35\0\0\0,\0\0\0=\0\0\0P\0\0\0b\0\0\0" "r\0\0\0~\4\4\4\207\4\4\4\213\0\0\0\213\4\4\4\207\2\2\2~\0\0\0r\0\0\0" "b\0\0\0P\0\0\0=\0\0\0,\0\0\0\35\0\0\0\21\0\0\0\12\0\0\0\4\0\0\0\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\4\0\0\0\11\0\0\0\17" "\0\0\0\30\0\0\0#\0\0\0""0\0\0\0=\0\0\0I\0\0\0S\0\0\0Z\0\0\0]\0\0\0]\0" "\0\0Z\0\0\0S\0\0\0I\0\0\0=\0\0\0""0\0\0\0#\0\0\0\30\0\0\0\17\0\0\0\11" "\0\0\0\4\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\0\0\0\3\0\0\0\7\0\0\0\13\0\0\0\21\0\0\0\30\0\0\0\37\0\0" "\0&\0\0\0,\0\0\0""0\0\0\0""2\0\0\0""2\0\0\0""0\0\0\0,\0\0\0&\0\0\0\37" "\0\0\0\30\0\0\0\21\0\0\0\13\0\0\0\7\0\0\0\3\0\0\0\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0" "\1\0\0\0\2\0\0\0\4\0\0\0\5\0\0\0\7\0\0\0\11\0\0\0\12\0\0\0\13\0\0\0\13" "\0\0\0\13\0\0\0\13\0\0\0\12\0\0\0\11\0\0\0\7\0\0\0\5\0\0\0\4\0\0\0\2" "\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0" "\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0"}; GdkPixbuf *get_close_pixbuf () { return gdk_pixbuf_new_from_inline (-1, close_button_data, FALSE, NULL); } granite-0.3.0/lib/Widgets/ModeButton.vala000644 001750 001750 00000017473 12340443640 021764 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2008-2013 Christian Hergert , Giulio Collura , Victor Eduardo , ammonkey This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Widgets { /** * This widget is a multiple option modal switch * * {{../../doc/images/ModeButton.png}} */ public class ModeButton : Gtk.Box { private class Item : Gtk.ToggleButton { public int index { get; construct; } public Item (int index) { Object (index: index); can_focus = false; add_events (Gdk.EventMask.SCROLL_MASK); } } public signal void mode_added (int index, Gtk.Widget widget); public signal void mode_removed (int index, Gtk.Widget widget); public signal void mode_changed (Gtk.Widget widget); /** * Index of currently selected item. */ public int selected { get { return _selected; } set { set_active (value); } } /** * Read-only length of current ModeButton */ public uint n_items { get { return item_map.size; } } private int _selected = -1; private Gee.HashMap item_map; /** * Makes new ModeButton */ public ModeButton () { homogeneous = true; spacing = 0; can_focus = false; item_map = new Gee.HashMap (); var style = get_style_context (); style.add_class (Gtk.STYLE_CLASS_LINKED); style.add_class ("raised"); // needed for toolbars } /** * Appends Pixbuf to ModeButton * * @param pixbuf Gdk.Pixbuf to append to ModeButton */ public int append_pixbuf (Gdk.Pixbuf pixbuf) { return append (new Gtk.Image.from_pixbuf (pixbuf)); } /** * Appends text to ModeButton * * @param text text to append to ModeButton * @return index of new item */ public int append_text (string text) { return append (new Gtk.Label(text)); } /** * Appends icon to ModeButton * * @param icon_name name of icon to append * @param size desired size of icon * @return index of appended item */ public int append_icon (string icon_name, Gtk.IconSize size) { return append (new Gtk.Image.from_icon_name (icon_name, size)); } /** * Appends given widget to ModeButton * * @param w widget to add to ModeButton * @return index of new item */ public int append (Gtk.Widget w) { int index; for (index = item_map.size; item_map.has_key (index); index++); assert (item_map[index] == null); var item = new Item (index); item.scroll_event.connect (on_scroll_event); item.add (w); item.button_press_event.connect (() => { set_active (item.index); return true; }); item_map[index] = item; add (item); item.show_all (); mode_added (index, w); return index; } /** * Sets item of given index's activity * * @param new_active_index index of changed item */ public void set_active (int new_active_index) { return_if_fail (item_map.has_key (new_active_index)); var new_item = item_map[new_active_index] as Item; if (new_item != null) { assert (new_item.index == new_active_index); new_item.set_active (true); if (_selected == new_active_index) return; // Unselect the previous item var old_item = item_map[_selected] as Item; if (old_item != null) old_item.set_active (false); _selected = new_active_index; mode_changed (new_item.get_child ()); } } /** * Changes visibility of item of given index * * @param index index of item to be modified * @param val value to change the visiblity to */ public void set_item_visible (int index, bool val) { return_if_fail (item_map.has_key (index)); var item = item_map[index] as Item; if (item != null) { assert (item.index == index); item.no_show_all = !val; item.visible = val; } } /** * Removes item at given index * * @param index index of item to remove */ public new void remove (int index) { return_if_fail (item_map.has_key (index)); var item = item_map[index] as Item; if (item != null) { assert (item.index == index); item_map.unset (index); mode_removed (index, item.get_child ()); item.destroy (); } } /** * Clears all children */ public void clear_children () { foreach (weak Gtk.Widget button in get_children ()) { button.hide (); if (button.get_parent () != null) base.remove (button); } item_map.clear (); _selected = -1; } private bool on_scroll_event (Gtk.Widget widget, Gdk.EventScroll ev) { int offset; switch (ev.direction) { case Gdk.ScrollDirection.DOWN: case Gdk.ScrollDirection.RIGHT: offset = 1; break; case Gdk.ScrollDirection.UP: case Gdk.ScrollDirection.LEFT: offset = -1; break; default: return false; } // Try to find a valid item, since there could be invisible items in // the middle and those shouldn't be selected. We use the children list // instead of item_map because order matters here. var children = get_children (); uint n_children = children.length (); var selected_item = item_map[selected]; if (selected_item == null) return false; int new_item = children.index (selected_item); if (new_item < 0) return false; do { new_item += offset; var item = children.nth_data (new_item) as Item; if (item != null && item.visible && item.sensitive) { selected = item.index; break; } } while (new_item >= 0 && new_item < n_children); return false; } } } granite-0.3.0/lib/Widgets/StaticNotebook.vala000644 001750 001750 00000010274 12340443640 022624 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2011-2013 Lucas Baudin This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ namespace Granite.Widgets { /** * This class provides an easy way to manage tabs. */ [Deprecated (replacement = "Gtk.Stack", since = "0.3")] public class StaticNotebook : Gtk.Box { private Gtk.Notebook notebook; private ModeButton switcher; private Gtk.Box switcher_box; /** * The page switcher will NEVER be shown if this property is set to true */ private bool switcher_hidden; /** * This currently selected page */ public int page { set { switcher.selected = value; notebook.page = value; } get { return notebook.page; } } public signal void page_changed (int index); /** * This creates a new StaticNotebook * * @param show_separator whether or not to show a seperator */ public StaticNotebook (bool show_separator = true) { orientation = Gtk.Orientation.VERTICAL; switcher_hidden = false; notebook = new Gtk.Notebook(); notebook.show_tabs = false; switcher = new ModeButton(); switcher_box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 0); if (show_separator) { var left_separator = new Gtk.Separator(Gtk.Orientation.HORIZONTAL); var right_separator = new Gtk.Separator(Gtk.Orientation.HORIZONTAL); switcher_box.pack_start(left_separator, true, true); switcher_box.pack_start(switcher, false, false); switcher_box.pack_end(right_separator, true, true); } else { switcher.halign = Gtk.Align.CENTER; switcher_box.pack_start(switcher, true, true); } switcher.set_margin_top(5); switcher.set_margin_bottom(5); pack_start(switcher_box, false, false); pack_start(notebook); switcher.mode_changed.connect(on_mode_changed); } public void set_switcher_visible (bool val) { switcher_box.set_no_show_all(!val); switcher_hidden = !val; update_switcher_visibility(); } public int append_page (Gtk.Widget widget, Gtk.Label label) { int index = notebook.append_page(widget, null); label.set_margin_right(5); label.set_margin_left(5); switcher.append(label); if(switcher.selected == -1) switcher.selected = 0; update_switcher_visibility(); return index; } void on_mode_changed (Gtk.Widget widget) { notebook.page = switcher.selected; page_changed(notebook.page); } public void remove_page (int number) { notebook.remove_page(number); switcher.remove(number); update_switcher_visibility(); } void update_switcher_visibility () { if (switcher_hidden) { switcher_box.hide(); return; } // Don't show tabs if there's only one page bool switcher_visible = notebook.get_n_pages() > 1; switcher_box.set_no_show_all (!switcher_visible); if (switcher_visible) switcher_box.show_all(); else switcher_box.hide(); } } } granite-0.3.0/lib/Widgets/StatusBar.vala000644 001750 001750 00000007027 12340443640 021606 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2012-2013 Granite Developers This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Authored by: Victor Eduardo ***/ /** * A status bar with a centered label. * * It supports adding widgets at its left and right sides. */ [Deprecated (replacement = "Gtk.ActionBar", since = "0.3")] public class Granite.Widgets.StatusBar : Gtk.Toolbar { private const int ITEM_SPACING = 3; /** * Label of status bar */ private Gtk.Label status_label; /** * Gtk box on the left */ private Gtk.Box left_box; /** * Gtk box on the right */ private Gtk.Box right_box; // This prevents a huge vertical padding. private const string STYLESHEET = """ GraniteWidgetsStatusBar { border-bottom-width: 0; border-right-width: 0; border-left-width: 0; -GtkWidget-window-dragging: false; } GraniteWidgetsStatusBar .button { padding: 0; } """; /** * Creates a new StatusBar. */ public StatusBar () { // Get rid of the "toolbar" class to avoid inheriting its style. // We want the widget to look more like a normal statusbar. get_style_context ().remove_class (Gtk.STYLE_CLASS_TOOLBAR); Utils.set_theming_for_screen (this.get_screen (), STYLESHEET, Gtk.STYLE_PROVIDER_PRIORITY_THEME); status_label = new Gtk.Label (null); status_label.set_justify (Gtk.Justification.CENTER); left_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); right_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); var left_item = new Gtk.ToolItem (); var status_label_item = new Gtk.ToolItem (); var right_item = new Gtk.ToolItem (); left_item.add (left_box); status_label_item.add (status_label); right_item.add (right_box); status_label_item.set_expand (true); status_label_item.halign = Gtk.Align.CENTER; left_item.valign = right_item.valign = status_label_item.valign = Gtk.Align.CENTER; this.insert (left_item, 0); this.insert (status_label_item, 1); this.insert (right_item, 2); } /** * Inserts widget in status bar * * @param widget widget to insert * @param use_left_side whether or not to use left_side */ public void insert_widget (Gtk.Widget widget, bool use_left_side = false) { if (use_left_side) left_box.pack_start (widget, false, false, ITEM_SPACING); else right_box.pack_start (widget, false, false, ITEM_SPACING); } /** * Sets the text of StatusBar * * @param text text to set Status bar to */ public void set_text (string text) { status_label.set_text (text); } } granite-0.3.0/lib/Widgets/SourceList.vala000644 001750 001750 00000257077 12340443640 022006 0ustar00shnatselshnatsel000000 000000 /*** Copyright (C) 2012-2013 Victor Eduardo This program or library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ***/ /** * A widget that can display a list of items organized in categories. * * The source list widget consists of a collection of items, some of which are also expandable (and * thus can contain more items). All the items displayed in the source list are children of the widget's * root item. The API is meant to be used as follows: * * 1. Create the items you want to display in the source list, setting the appropriate values for their * properties. The desired hierarchy is achieved by creating expandable items and adding items to them. * These will be displayed as descendants in the widget's tree structure. The expandable items that are * not nested inside any other item are considered to be at root level, and should be added to * the widget's root item.<
> * * Expandable items located at the root level are treated as categories, and only support text. * * ''Example''<
> * The final tree will have the following structure: * {{{ * Libraries * Music * Stores * My Store * Music * Podcasts * Devices * Player 1 * Player 2 * }}} * * {{{ * var library_category = new Granite.Widgets.SourceList.ExpandableItem ("Libraries"); * var store_category = new Granite.Widgets.SourceList.ExpandableItem ("Stores"); * var device_category = new Granite.Widgets.SourceList.ExpandableItem ("Devices"); * * var music_item = new Granite.Widgets.SourceList.Item ("Music"); * * // "Libraries" will be the parent category of "Music" * library_category.add (music_item); * * // We plan to add sub-items to the store, so let's use an expandable item * var my_store_item = new Granite.Widgets.SourceList.ExpandableItem ("My Store"); * store_category.add (my_store_item); * * var my_store_podcast_item = new Granite.Widgets.SourceList.Item ("Podcasts"); * var my_store_music_item = new Granite.Widgets.SourceList.Item ("Music"); * * my_store_item.add (my_store_music_item); * my_store_item.add (my_store_podcast_item); * * var player1_item = new Granite.Widgets.SourceList.Item ("Player 1"); * var player2_item = new Granite.Widgets.SourceList.Item ("Player 2"); * * device_category.add (player1_item); * device_category.add (player2_item); * }}} * * 2. Create a source list widget.<
> * {{{ * var source_list = new Granite.Widgets.SourceList (); * }}} * * 3. Add root-level items to the {@link Granite.Widgets.SourceList.root} item. * This item only serves as a container, and all its properties are ignored by the widget. * * {{{ * // This will add the main categories (including their children) to the source list. After * // having being added to be widget, any other item added to any of these items * // (or any other child item in a deeper level) will be automatically added too. * // There's no need to deal with the source list widget directly. * * var root = source_list.root; * * root.add (library_category); * root.add (store_category); * root.add (device_category); * }}} * * The steps mentioned above are enough for initializing the source list. Future changes to the items' * properties are ''automatically'' reflected by the widget. * * Final steps would involve connecting handlers to the source list events, being * {@link Granite.Widgets.SourceList.item_selected} the most important, as it indicates that * the selection was modified. * * It is strongly recommended to pack the source list into the GUI using the * {@link Granite.Widgets.ThinPaned} widget. It has aesthetic advantages and offers a wider * re-size handle than {@link Gtk.Paned}. This is usually done as follows: * {{{ * var pane = new Granite.Widgets.ThinPaned (); * pane.pack1 (source_list, true, false); * pane.pack2 (content_area, true, false); * }}} * * @since 0.2 * @see Granite.Widgets.ThinPaned */ public class Granite.Widgets.SourceList : Gtk.ScrolledWindow { /** * = WORKING INTERNALS = * * In order to offer a transparent Item-based API, and avoid the need of providing methods * to deal with items directly on the SourceList widget, it was decided to follow a monitor-like * implementation, where the source list permanently monitors its root item and any other * child item added to it. The task of monitoring the properties of the items has been * divided between different objects, as shown below: * * Monitored by: Object::method that receives the signals indicating the property change. * Applied by: Object::method that actually updates the tree to reflect the property changes * (directly or indirectly, as in the case of the tree data model). * * --------------------------------------------------------------------------------------------- * PROPERTY | MONITORED BY | APPLIED BY * --------------------------------------------------------------------------------------------- * + Item | | * - parent | Not monitored | N/A * - name | DataModel::on_item_prop_changed | Tree::name_cell_data_func * - editable | DataModel::on_item_prop_changed | Queried when needed (See Tree::start_editing_item) * - visible | DataModel::on_item_prop_changed | DataModel::filter_visible_func * - icon | DataModel::on_item_prop_changed | Tree::icon_cell_data_func * - activatable | Same as @icon | Same as @icon * + ExpandableItem | | * - collapsible | DataModel::on_item_prop_changed | Tree::update_expansion * | | Tree::expander_cell_data_func * - expanded | Same as @collapsible | Same as @collapsible * --------------------------------------------------------------------------------------------- * * Only automatic properties are monitored. ExpandableItem's additions/removals are handled by * DataModel::add_item() and DataModel::remove_item() * * Other features: * - Sorting: this happens on the tree-model level (DataModel). Also see SourceList::SortFunc. */ /** * A source list entry. * * Any change made to any of its properties will be ''automatically'' reflected * by the {@link Granite.Widgets.SourceList} widget. * * @since 0.2 */ public class Item : Object { /** * Emitted when the user has finished editing the item's name. * * By default, if the name doesn't consist of white space, it is automatically assigned * to the {@link Granite.Widgets.SourceList.Item.name} property. The default behavior can * be changed by overriding this signal. * @param new_name The item's new name (result of editing.) * @since 0.2 */ public virtual signal void edited (string new_name) { if (editable && new_name.strip () != "") this.name = new_name; } /** * The {@link Granite.Widgets.SourceList.Item.activatable} icon was activated. * * @see Granite.Widgets.SourceList.Item.activatable * @since 0.2 */ public virtual signal void action_activated () { } /** * Emitted when the item is double-clicked or when it is selected and one of the keys: * Space, Shift+Space, Return or Enter is pressed. This signal is //also// for * editable items. * * @since 0.2 */ public virtual signal void activated () { } /** * Parent {@link Granite.Widgets.SourceList.ExpandableItem} of the item. * ''Must not'' be modified. * * @since 0.2 */ public ExpandableItem parent { get; internal set; } /** * The item's name. Primary and most important information. * * @since 0.2 */ public string name { get; set; default = ""; } /** * A badge shown next to the item's name. * * It can be used for displaying the number of unread messages in the "Inbox" item, * for instance. * * @since 0.2 */ public string badge { get; set; default = ""; } /** * Whether the item's name can be edited from within the source list. * * When this property is set to //true//, users can edit the item by pressing * the F2 key, or by double-clicking its name. * * ''This property only works for selectable items''. * * @see Granite.Widgets.SourceList.Item.selectable * @see Granite.Widgets.SourceList.start_editing_item * @since 0.2 */ public bool editable { get; set; default = false; } /** * Whether the item should appear in the source list's tree or not. * * @since 0.2 */ public bool visible { get; set; default = true; } /** * Whether the item can be selected or not. * * Setting this property to true doesn't guarantee that the item will actually be * selectable, since there are other external factors to take into account, like the * item's {@link Granite.Widgets.SourceList.Item.visible} property; whether the item is * a category; the parent item is collapsed, etc. * * @see Granite.Widgets.SourceList.Item.visible * @since 0.2 */ public bool selectable { get; set; default = true; } /** * Primary icon. * * This property should be used to give the user an idea of what the item represents * (i.e. content type.) * * @since 0.2 */ public Icon icon { get; set; } /** * An activatable icon that works like a button. * * It can be used for e.g. showing an //"eject"// icon on a device's item. * * @see Granite.Widgets.SourceList.Item.action_activated * @since 0.2 */ public Icon activatable { get; set; } /** * Creates a new {@link Granite.Widgets.SourceList.Item}. * * @param name Name of the item. * @return (transfer full) A new {@link Granite.Widgets.SourceList.Item}. * @since 0.2 */ public Item (string name = "") { this.name = name; } /** * Invoked when the item is secondary-clicked or when the usual menu keys are pressed. * * @return A {@link Gtk.Menu} or //null// if nothing should be displayed. * @since 0.2 */ public virtual Gtk.Menu? get_context_menu () { return null; } } /** * An item that can contain more items. * * It supports all the properties inherited from {@link Granite.Widgets.SourceList.Item}, * and behaves like a normal item, except when it is located at the root level; in that case, * the following properties are ignored by the widget: * * * {@link Granite.Widgets.SourceList.Item.selectable} * * {@link Granite.Widgets.SourceList.Item.editable} * * {@link Granite.Widgets.SourceList.Item.icon} * * {@link Granite.Widgets.SourceList.Item.activatable} * * {@link Granite.Widgets.SourceList.Item.badge} * * Root-level expandable items (i.e. Main Categories) are ''not'' displayed when they contain * zero visible children. * * @since 0.2 */ public class ExpandableItem : Item { /** * Emitted when an item is added. * * @param item Item added. * @see Granite.Widgets.SourceList.ExpandableItem.add * @since 0.2 */ public signal void child_added (Item item); /** * Emitted when an item is removed. * * @param item Item removed. * @see Granite.Widgets.SourceList.ExpandableItem.remove * @since 0.2 */ public signal void child_removed (Item item); /** * Emitted when the item is expanded or collapsed. * * @since 0.2 */ public virtual signal void toggled () { } /** * Whether the item is collapsible or not. * * When set to //false//, the item is //always// expanded and the expander is * not shown. Please note that this will also affect the value returned by the * {@link Granite.Widgets.SourceList.ExpandableItem.expanded} property. * * @see Granite.Widgets.SourceList.ExpandableItem.expanded * @since 0.2 */ public bool collapsible { get; set; default = true; } /** * Whether the item is expanded or not. * * The source list widget will obey the value of this property when possible. * * This property has no effect when {@link Granite.Widgets.SourceList.ExpandableItem.collapsible} * is set to //false//. Also keep in mind that, __when set to //true//__, this property * doesn't always represent the actual expansion state of an item. For example, it might * be the case that an expandable item is collapsed because it has zero visible children, * but its //expanded// property value is still //true//; in such case, once one of the * item's children becomes visible, the item will be expanded again. Same applies to items * hidden behind a collapsed parent item. * * If obtaining the ''actual'' expansion state of an item is important to your needs, * use {@link Granite.Widgets.SourceList.is_item_expanded} instead. * * @see Granite.Widgets.SourceList.ExpandableItem.collapsible * @see Granite.Widgets.SourceList.is_item_expanded * @since 0.2 */ private bool _expanded = false; public bool expanded { get { return _expanded || !collapsible; } // if not collapsible, always return true set { if (value != _expanded) { _expanded = value; toggled (); } } } /** * Number of children contained by the item. * * @since 0.2 */ public uint n_children { get { return children_list.size; } } /** * The item's children. * * @since 0.2 */ public Gee.Collection children { owned get { return children_list.read_only_view; } } private Gee.Collection children_list = new Gee.ArrayList (); /** * Creates a new {@link Granite.Widgets.SourceList.ExpandableItem} * * @param name Title of the item. * @return (transfer full) A new {@link Granite.Widgets.SourceList.ExpandableItem}. * @since 0.2 */ public ExpandableItem (string name = "") { base (name); editable = false; } /** * Should return a negative integer, zero, or a positive integer if ''a'' sorts //before// * ''b'', ''a'' sorts //with// ''b'', or ''a'' sorts //after// ''b'' respectively. If two * items compare as equal, their order in the sorted source list is undefined. * * In order to ensure that the source list behaves as expected, this method must define a * partial order on the source list tree; i.e. it must be reflexive, antisymmetric and * transitive. * * (Same description as {@link Gtk.TreeIterCompareFunc}.) * * @param a First item. * @param b Second item. * @return A //negative// integer if //a// sorts after //b//, //zero// if //a// equals //b//, * or a //positive// integer if //a// sorts before //b//. * @since 0.2 */ public virtual int compare (Item a, Item b) { return 0; } /** * Checks whether the item contains the specified child. * * This method only considers the item's immediate children. * * @param item Item to search. * @return Whether the item was found or not. * @since 0.2 */ public bool contains (Item item) { return item in children_list; } /** * Adds an item. * * {@link Granite.Widgets.SourceList.ExpandableItem.child_added} is fired after the item is added. * * While adding a child item, //the item it's being added to will set itself as the parent//. * Please note that items are required to have their //parent// property set to //null// before * being added, so make sure you remove the item from its previous parent before attempting * to add it to another item. For instance: * {{{ * if (item.parent != null) * item.parent.remove (item); // this will set item's parent to null * new_parent.add (item); * }}} * * @param item The item to add. Its parent __must__ be //null//. * @see Granite.Widgets.SourceList.ExpandableItem.child_added * @see Granite.Widgets.SourceList.ExpandableItem.remove * @since 0.2 */ public void add (Item item) requires (item.parent == null) { item.parent = this; children_list.add (item); child_added (item); } /** * Removes an item. * * The {@link Granite.Widgets.SourceList.ExpandableItem.child_removed} signal is fired * //after removing the item//. Finally (i.e. after all the handlers have been invoked), * the item's {@link Granite.Widgets.SourceList.Item.parent} property is set to //null//. * This has the advantage of letting signal handlers know the parent from which //item// * is being removed. * * @param item The item to remove. This will fail if item has a different parent. * @see Granite.Widgets.SourceList.ExpandableItem.child_removed * @see Granite.Widgets.SourceList.ExpandableItem.clear * @since 0.2 */ public void remove (Item item) requires (item.parent == this) { children_list.remove (item); child_removed (item); item.parent = null; } /** * Removes all the items contained by the item. It works similarly to * {@link Granite.Widgets.SourceList.ExpandableItem.remove}. * * @see Granite.Widgets.SourceList.ExpandableItem.remove * @see Granite.Widgets.SourceList.ExpandableItem.child_removed * @since 0.2 */ public void clear () { // Create a copy of the children so that it's safe to iterate it // (e.g. by using foreach) while removing items var children_list_copy = new Gee.ArrayList (); children_list_copy.add_all (children_list); foreach (var item in children_list_copy) remove (item); } /** * Expands the item and/or its children. * * @param inclusive Whether to also expand this item (true), or only its children (false). * @param recursive Whether to recursively expand all the children (true), or only * immediate children (false). * @see Granite.Widgets.SourceList.ExpandableItem.expanded * @since 0.2 */ public void expand_all (bool inclusive = true, bool recursive = true) { set_expansion (this, inclusive, recursive, true); } /** * Collapses the item and/or its children. * * @param inclusive Whether to also collapse this item (true), or only its children (false). * @param recursive Whether to recursively collapse all the children (true), or only * immediate children (false). The latter case might appear contradictory, given that collapsing * immediate children will also //visually// collapse non-immediate children, but it makes total * sense once you've understood what the {@link Granite.Widgets.SourceList.ExpandableItem.expanded} * property actually means. If you set //recursive// to //true,// the non-immediate children's * //expanded// property will be set to //false//, and therefore they will __stay collapsed__ * the next time their parents are expanded; otherwise (i.e. if //recursive// is //false//), * __their previous expansion state will be restored__ once their parents are expanded again. * @see Granite.Widgets.SourceList.ExpandableItem.expanded * @since 0.2 */ public void collapse_all (bool inclusive = true, bool recursive = true) { set_expansion (this, inclusive, recursive, false); } private static void set_expansion (ExpandableItem item, bool inclusive, bool recursive, bool expanded) { if (inclusive) item.expanded = expanded; foreach (var child_item in item.children) { var child_expandable_item = child_item as ExpandableItem; if (child_expandable_item != null) { if (recursive) set_expansion (child_expandable_item, true, true, expanded); else child_expandable_item.expanded = expanded; } } } /** * Recursively expands the item along with its parent(s). * * @see Granite.Widgets.SourceList.ExpandableItem.expanded * @since 0.2 */ public void expand_with_parents () { // Update parent items first due to GtkTreeView's working internals: // Expanding children before their parents would not always work, because // they could be obscured behind a collapsed row by the time the treeview // tries to expand them, obviously failing. if (parent != null) parent.expand_with_parents (); expanded = true; } /** * Recursively collapses the item along with its parent(s). * * @see Granite.Widgets.SourceList.ExpandableItem.expanded * @since 0.2 */ public void collapse_with_parents () { if (parent != null) parent.collapse_with_parents (); expanded = false; } } /** * The model backing the SourceList tree. * * It monitors item property changes, and handles children additions and removals. It also controls * the visibility of the items based on their "visible" property, and on their number of children, * if they happen to be categories. Its main purpose is to provide an easy and practical interface * for sorting, adding, removing and updating items, eliminating the need of repeatedly dealing with * the Gtk.TreeModel API directly. */ private class DataModel : Gtk.TreeModelFilter { /** * An object that references a particular row in a model. This class is a wrapper built around * Gtk.TreeRowReference, and exists with the purpose of ensuring we never use invalid tree paths * or iters in the model, since most of these errors provoke failures due to GTK+ assertions * or, even worse, unexpected behavior. */ private class NodeWrapper { /** * The actual reference to the node. If is is null, it is treated as invalid. */ private Gtk.TreeRowReference? row_reference; /** * A newly-created Gtk.TreeIter pointing to the node if it exists; null otherwise. */ public Gtk.TreeIter? iter { owned get { Gtk.TreeIter? rv = null; if (valid) { var _path = this.path; if (_path != null) { Gtk.TreeIter _iter; if (row_reference.get_model ().get_iter (out _iter, _path)) rv = _iter; } } return rv; } } /** * A newly-created Gtk.TreePath pointing to the node if it exists; null otherwise. */ public Gtk.TreePath? path { owned get { return valid ? row_reference.get_path () : null; } } /** * Whether the node is valid or not. When it is not valid, no valid references are * returned by the object to avoid errors (null is returned instead). */ public bool valid { get { return row_reference != null && row_reference.valid (); } } public NodeWrapper (Gtk.TreeModel model, Gtk.TreeIter iter) { row_reference = new Gtk.TreeRowReference (model, model.get_path (iter)); } } /** * Helper object used to monitor item property changes. */ private class ItemMonitor { public signal void changed (Item self, string prop_name); private Item item; public ItemMonitor (Item item) { this.item = item; item.notify.connect_after (on_notify); } ~ItemMonitor () { item.notify.disconnect (on_notify); } private void on_notify (ParamSpec prop) { changed (item, prop.name); } } private enum Column { ITEM, N_COLUMNS; public Type type () { switch (this) { case ITEM: return typeof (Item); default: assert_not_reached (); // a Type must be returned for every valid column } } } public signal void item_updated (Item item); /** * Used by push_parent_update() as key to associate the respective data to the objects. */ private const string ITEM_PARENT_NEEDS_UPDATE = "item-parent-needs-update"; private Gtk.SortType sort_dir = Gtk.SortType.ASCENDING; public Gtk.SortType sort_direction { get { return sort_dir; } set { sort_dir = value; resort (); } } private ExpandableItem _root; /** * Root item. * * This item is not actually part of the model. It's only used as a proxy * for adding and removing items. */ public ExpandableItem root { get { return _root; } set { if (_root != null) { remove_children_monitor (_root); foreach (var item in _root.children) remove_item (item); } _root = value; add_children_monitor (_root); foreach (var item in _root.children) add_item (item); } } // This hash map stores items and their respective child node references. For that reason, the // references it contains should only be used on the child_tree model, or converted to filter // iters/paths using convert_child_*_to_*() before using them with the filter (i.e. this) model. private Gee.HashMap items = new Gee.HashMap (); private Gee.HashMap monitors = new Gee.HashMap (); private Gtk.TreeStore child_tree; private SourceList.SortFunc? sort_func; private unowned SourceList.VisibleFunc? filter_func; public DataModel () { var child_tree = new Gtk.TreeStore (Column.N_COLUMNS, Column.ITEM.type ()); Object (child_model: child_tree, virtual_root: null); this.child_tree = child_tree; child_tree.set_default_sort_func (child_model_sort_func); resort (); set_visible_func (filter_visible_func); } public bool has_item (Item item) { return items.has_key (item); } public void update_item (Item item) requires (has_item (item)) { assert (root != null); // Emitting row_changed() for this item's row in the child model causes the filter // (i.e. this model) to re-evaluate whether a row is visible or not, calling // filter_visible_func() for that row again, and that's exactly what we want. var node_reference = items.get (item); if (node_reference != null) { var path = node_reference.path; var iter = node_reference.iter; if (path != null && iter != null) { child_tree.row_changed (path, iter); item_updated (item); } } } private void add_item (Item item) requires (!has_item (item)) { assert (root != null); // Find the parent iter Gtk.TreeIter? parent_child_iter = null, child_iter; var parent = item.parent; if (parent != null && parent != root) { // Add parent if it hasn't been added yet if (!has_item (parent)) add_item (parent); // Try to find the parent's iter parent_child_iter = get_item_child_iter (parent); // Parent must have been added prior to adding this item assert (parent_child_iter != null); } child_tree.append (out child_iter, parent_child_iter); child_tree.set (child_iter, Column.ITEM, item, -1); items.set (item, new NodeWrapper (child_tree, child_iter)); // This is equivalent to a property change. The tree still needs to update // some of the new item's properties through this signal's handler. item_updated (item); add_property_monitor (item); push_parent_update (parent); // If the item is expandable, also add children var expandable = item as ExpandableItem; if (expandable != null) { foreach (var child_item in expandable.children) add_item (child_item); // Monitor future additions/removals through signal handlers add_children_monitor (expandable); } } private void remove_item (Item item) requires (has_item (item)) { assert (root != null); remove_property_monitor (item); // get_item_child_iter() depends on items.get(item) for retrieving the right reference, // so don't unset the item from @items yet! We first get the child iter and then // unset the value. var child_iter = get_item_child_iter (item); // Now we remove the item from the table, because that way get_item_child_iter() and // all the methods that depend on it won't return invalid iters or items when // called. This is important because child_tree.remove() will emit row_deleted(), // and its handlers could potentially depend on one of the methods mentioned above. items.unset (item); if (child_iter != null) child_tree.remove (ref child_iter); push_parent_update (item.parent); // If the item is expandable, also remove children var expandable = item as ExpandableItem; if (expandable != null) { // No longer monitor future additions or removals remove_children_monitor (expandable); foreach (var child_item in expandable.children) remove_item (child_item); } } private void add_property_monitor (Item item) { var wrapper = new ItemMonitor (item); monitors[item] = wrapper; wrapper.changed.connect (on_item_prop_changed); } private void remove_property_monitor (Item item) { var wrapper = monitors[item]; if (wrapper != null) wrapper.changed.disconnect (on_item_prop_changed); monitors.unset (item); } private void add_children_monitor (ExpandableItem item) { item.child_added.connect_after (on_item_child_added); item.child_removed.connect_after (on_item_child_removed); } private void remove_children_monitor (ExpandableItem item) { item.child_added.disconnect (on_item_child_added); item.child_removed.disconnect (on_item_child_removed); } private void on_item_child_added (Item item) { add_item (item); } private void on_item_child_removed (Item item) { remove_item (item); } private void on_item_prop_changed (Item item, string prop_name) { if (prop_name != "parent") update_item (item); } /** * Pushes a call to update_item() if //parent// is not //null//. * * This is needed because the visibility of categories depends on their n_children property, * and also because item expansion should be updated after adding or removing items. * If many updates are pushed, and the item has still not been updated, only one is processed. * This guarantees efficiency as updating a category item could trigger expensive actions. */ private void push_parent_update (ExpandableItem? parent) { if (parent == null) return; bool needs_update = parent.get_data (ITEM_PARENT_NEEDS_UPDATE); // If an update is already waiting to be processed, just return, as we // don't need to queue another one for the same item. if (needs_update) return; var path = get_item_path (parent); if (path != null) { // Let's mark this item for update parent.set_data (ITEM_PARENT_NEEDS_UPDATE, true); Idle.add (() => { if (parent != null) { update_item (parent); // Already updated. No longer needs an update. parent.set_data (ITEM_PARENT_NEEDS_UPDATE, false); } return false; }); } } /** * Returns the Item pointed by iter, or null if the iter doesn't refer to a valid item. */ public Item? get_item (Gtk.TreeIter iter) { Item? item; get (iter, Column.ITEM, out item, -1); return item; } /** * Returns the Item pointed by path, or null if the path doesn't refer to a valid item. */ public Item? get_item_from_path (Gtk.TreePath path) { Gtk.TreeIter iter; if (get_iter (out iter, path)) return get_item (iter); return null; } /** * Returns a newly-created path pointing to the item, or null in case a valid path * is not found. */ public Gtk.TreePath? get_item_path (Item item) { Gtk.TreePath? path = null, child_path = get_item_child_path (item); // We want a filter path, not a child_model path if (child_path != null) path = convert_child_path_to_path (child_path); return path; } /** * Returns a newly-created iterator pointing to the item, or null in case a valid iter * was not found. */ public Gtk.TreeIter? get_item_iter (Item item) { var child_iter = get_item_child_iter (item); if (child_iter != null) { Gtk.TreeIter iter; if (convert_child_iter_to_iter (out iter, child_iter)) return iter; } return null; } /** * Sets the sort function, or "unsets" it if null is passed. Please note though * that unsetting the sort function doesn't bring the items back to their initial * order. */ public void set_sort_func (owned SourceList.SortFunc? sort_func) { this.sort_func = (owned) sort_func; resort (); } /** * External "extra" filter method. */ public void set_filter_func (SourceList.VisibleFunc? visible_func) { this.filter_func = visible_func; } /** * Checks whether an item is a category (i.e. a root-level expandable item). * The caller must pass an iter or path pointing to the item, but not both * (one of them must be null.) * * TODO: instead of checking the position of the iter or path, we should simply * check whether the item's parent is the root item and whether the item is * expandable. We don't do so right now because vala still allows client code * to access the Item.parent property, even though its setter is defined as internal. */ public bool is_category (Item item, Gtk.TreeIter? iter, Gtk.TreePath? path = null) { bool is_category = false; // either iter or path has to be null if (item is ExpandableItem) { if (iter != null) { assert (path == null); is_category = is_iter_at_root_level (iter); } else { assert (iter == null); is_category = is_path_at_root_level (path); } } return is_category; } public bool is_iter_at_root_level (Gtk.TreeIter iter) { return is_path_at_root_level (get_path (iter)); } public bool is_path_at_root_level (Gtk.TreePath path) { return path.get_depth () == 1; } private void resort () { child_tree.set_sort_column_id (Gtk.SortColumn.UNSORTED, sort_direction); child_tree.set_sort_column_id (Gtk.SortColumn.DEFAULT, sort_direction); } private int child_model_sort_func (Gtk.TreeModel model, Gtk.TreeIter a, Gtk.TreeIter b) { int sort = 0; Item? item_a, item_b; child_tree.get (a, Column.ITEM, out item_a, -1); child_tree.get (b, Column.ITEM, out item_b, -1); // If the sort function is not null use old sorting API. Otherwise, use each // item's compare() method. if (sort_func != null) { if (item_a != null && item_b != null) sort = sort_func (item_a, item_b); } else { // code should only compare items on same hierarchy level assert (item_a.parent == item_b.parent); var parent = item_a.parent; if (parent != null) sort = parent.compare (item_a, item_b); } return sort; } private Gtk.TreeIter? get_item_child_iter (Item item) { Gtk.TreeIter? child_iter = null; var child_node_wrapper = items.get (item); if (child_node_wrapper != null) child_iter = child_node_wrapper.iter; return child_iter; } private Gtk.TreePath? get_item_child_path (Item item) { Gtk.TreePath? child_path = null; var child_node_wrapper = items.get (item); if (child_node_wrapper != null) child_path = child_node_wrapper.path; return child_path; } /** * Filters the child-tree items based on their "visible" property. */ private bool filter_visible_func (Gtk.TreeModel child_model, Gtk.TreeIter iter) { bool item_visible = false; Item? item; child_tree.get (iter, Column.ITEM, out item, -1); if (item != null) { item_visible = item.visible; // If the item is a category, also query the number of visible children // because empty categories should not be displayed. var expandable = item as ExpandableItem; if (expandable != null && child_tree.iter_depth (iter) == 0) { uint n_visible_children = 0; foreach (var child_item in expandable.children) { if (child_item.visible) n_visible_children++; } item_visible = item_visible && n_visible_children > 0; } } if (filter_func != null) item_visible = item_visible && filter_func (item); return item_visible; } } /** * Class responsible for rendering Item.icon and Item.activatable. It also * notifies about clicks through the activated() signal. */ private class CellRendererIcon : Gtk.CellRendererPixbuf { public signal void activated (string path); private const Gtk.IconSize ICON_SIZE = Gtk.IconSize.MENU; public CellRendererIcon () { mode = Gtk.CellRendererMode.ACTIVATABLE; stock_size = ICON_SIZE; follow_state = true; } public override bool activate (Gdk.Event event, Gtk.Widget widget, string path, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gtk.CellRendererState flags) { activated (path); return true; } } /** * A cell renderer that only adds space. */ private class CellRendererSpacer : Gtk.CellRenderer { /** * Indentation level represented by this cell renderer */ public int level { get; set; default = -1; } public override Gtk.SizeRequestMode get_request_mode () { return Gtk.SizeRequestMode.HEIGHT_FOR_WIDTH; } public override void get_preferred_width (Gtk.Widget widget, out int min_size, out int natural_size) { min_size = natural_size = 2 * (int) xpad; } public override void get_preferred_height_for_width (Gtk.Widget widget, int width, out int min_height, out int natural_height) { min_height = natural_height = 2 * (int) ypad; } public override void render (Cairo.Context context, Gtk.Widget widget, Gdk.Rectangle bg_area, Gdk.Rectangle cell_area, Gtk.CellRendererState flags) { // Nothing to do. This renderer only adds space. } [Deprecated (replacement = "Gtk.CellRenderer.get_preferred_size", since = "")] public override void get_size (Gtk.Widget widget, Gdk.Rectangle? cell_area, out int x_offset, out int y_offset, out int width, out int height) { assert_not_reached (); } } /** * The tree that actually displays the items. * * All the user interaction happens here. */ private class Tree : Gtk.TreeView { public DataModel data_model { get; set; } public signal void item_selected (Item? item); public Item? selected_item { get { return selected; } set { set_selected (value, true); } } public bool editing { get { return text_cell.editing; } } public Pango.EllipsizeMode ellipsize_mode { get { return text_cell.ellipsize; } set { text_cell.ellipsize = value; } } private enum Column { ITEM, N_COLS } private Item? selected; private unowned Item? edited; private Gtk.Entry? editable_entry; private Gtk.CellRendererText text_cell; private CellRendererIcon icon_cell; private CellRendererIcon activatable_cell; private CellRendererBadge badge_cell; private CellRendererExpander primary_expander_cell; private CellRendererExpander secondary_expander_cell; private Gee.HashMap spacer_cells; // cells used for left spacing private const string DEFAULT_STYLESHEET = """ .source-list.badge { border-radius: 10px; border-width: 0; padding: 1px 2px 1px 2px; font-weight: bold; } """; private const string STYLE_PROP_LEVEL_INDENTATION = "level-indentation"; private const string STYLE_PROP_LEFT_PADDING = "left-padding"; private const string STYLE_PROP_EXPANDER_SPACING = "expander-spacing"; static construct { install_style_property (new ParamSpecInt (STYLE_PROP_LEVEL_INDENTATION, "Level Indentation", "Space to add at the beginning of every indentation level. Must be an even number.", 1, 50, 6, ParamFlags.READABLE)); install_style_property (new ParamSpecInt (STYLE_PROP_LEFT_PADDING, "Left Padding", "Padding added to the left side of the tree. Must be an even number.", 1, 50, 4, ParamFlags.READABLE)); install_style_property (new ParamSpecInt (STYLE_PROP_EXPANDER_SPACING, "Expander Spacing", "Space added between an item and its expander. Must be an even number.", 1, 50, 4, ParamFlags.READABLE)); } public Tree (DataModel data_model) { Utils.set_theming (this, DEFAULT_STYLESHEET, StyleClass.SOURCE_LIST, Gtk.STYLE_PROVIDER_PRIORITY_FALLBACK); this.data_model = data_model; set_model (data_model); halign = valign = Gtk.Align.FILL; expand = true; enable_search = false; headers_visible = false; enable_grid_lines = Gtk.TreeViewGridLines.NONE; // Deactivate GtkTreeView's built-in expander functionality expander_column = null; show_expanders = false; var item_column = new Gtk.TreeViewColumn (); item_column.expand = true; insert_column (item_column, Column.ITEM); // Now pack the cell renderers. We insert them in reverse order (using pack_end) // because we want to use TreeViewColumn.pack_start exclusively for inserting // spacer cell renderers for level-indentation purposes. // See add_spacer_cell_for_level() for more details. // Second expander. Used for main categories secondary_expander_cell = new CellRendererExpander (); secondary_expander_cell.is_category_expander = true; secondary_expander_cell.xpad = 10; item_column.pack_end (secondary_expander_cell, false); item_column.set_cell_data_func (secondary_expander_cell, expander_cell_data_func); activatable_cell = new CellRendererIcon (); activatable_cell.xpad = 6; activatable_cell.activated.connect (on_activatable_activated); item_column.pack_end (activatable_cell, false); item_column.set_cell_data_func (activatable_cell, icon_cell_data_func); badge_cell = new CellRendererBadge (); badge_cell.xpad = 1; badge_cell.xalign = 1; item_column.pack_end (badge_cell, false); item_column.set_cell_data_func (badge_cell, badge_cell_data_func); text_cell = new Gtk.CellRendererText (); text_cell.editable_set = true; text_cell.editable = false; text_cell.editing_started.connect (on_editing_started); text_cell.editing_canceled.connect (on_editing_canceled); text_cell.ellipsize = Pango.EllipsizeMode.END; text_cell.xalign = 0; item_column.pack_end (text_cell, true); item_column.set_cell_data_func (text_cell, name_cell_data_func); icon_cell = new CellRendererIcon (); icon_cell.xpad = 2; item_column.pack_end (icon_cell, false); item_column.set_cell_data_func (icon_cell, icon_cell_data_func); // First expander. Used for normal expandable items primary_expander_cell = new CellRendererExpander (); int expander_spacing; style_get (STYLE_PROP_EXPANDER_SPACING, out expander_spacing); primary_expander_cell.xpad = expander_spacing / 2; item_column.pack_end (primary_expander_cell, false); item_column.set_cell_data_func (primary_expander_cell, expander_cell_data_func); // Selection var selection = get_selection (); selection.mode = Gtk.SelectionMode.BROWSE; selection.set_select_function (select_func); // Monitor item changes data_model.item_updated.connect_after (on_model_item_updated); // Add root-level indentation. New levels will be added by update_item_expansion() add_spacer_cell_for_level (1); } ~Tree () { text_cell.editing_started.disconnect (on_editing_started); text_cell.editing_canceled.disconnect (on_editing_canceled); data_model.item_updated.disconnect (on_model_item_updated); } private void on_model_item_updated (Item item) { // Currently, all the other properties are updated automatically by the // cell-data functions after a change in the model. var expandable_item = item as ExpandableItem; if (expandable_item != null) update_expansion (expandable_item); } private void add_spacer_cell_for_level (int level, bool check_previous = true) requires (level > 0) { if (spacer_cells == null) spacer_cells = new Gee.HashMap (); if (!spacer_cells.has_key (level)) { var spacer_cell = new CellRendererSpacer (); spacer_cell.level = level; spacer_cells[level] = spacer_cell; uint cell_xpadding; // The primary expander is not visible for root-level (i.e. first level) // items, so for the second level of indentation we use a low padding // because the primary expander will add enough space. For the root level, // we use left_padding, and level_indentation for the remaining levels. // The value of cell_xpadding will be allocated *twice* by the cell renderer, // so we set the value to a half of actual (desired) value. switch (level) { case 1: // root int left_padding; style_get (STYLE_PROP_LEFT_PADDING, out left_padding); cell_xpadding = left_padding / 2; break; case 2: // second level cell_xpadding = 0; break; default: // remaining levels int level_indentation; style_get (STYLE_PROP_LEVEL_INDENTATION, out level_indentation); cell_xpadding = level_indentation / 2; break; } spacer_cell.xpad = cell_xpadding; var item_column = get_column (Column.ITEM); item_column.pack_start (spacer_cell, false); item_column.set_cell_data_func (spacer_cell, spacer_cell_data_func); // Make sure that the previous indentation levels also exist if (check_previous) { for (int i = level - 1; i > 0; i--) add_spacer_cell_for_level (i, false); } } } /** * Evaluates whether the item at the specified path can be selected or not. */ private bool select_func (Gtk.TreeSelection selection, Gtk.TreeModel model, Gtk.TreePath path, bool path_currently_selected) { bool selectable = false; var item = data_model.get_item_from_path (path); if (item != null) { // Main categories ARE NOT selectable, so check for that if (!data_model.is_category (item, null, path)) selectable = item.selectable; } return selectable; } private Gtk.TreePath? get_selected_path () { Gtk.TreePath? selected_path = null; Gtk.TreeSelection? selection = get_selection (); if (selection != null) { Gtk.TreeModel? model; var selected_rows = selection.get_selected_rows (out model); if (selected_rows.length () == 1) selected_path = selected_rows.nth_data (0); } return selected_path; } private void set_selected (Item? item, bool scroll_to_item) { if (item == null) { Gtk.TreeSelection? selection = get_selection (); if (selection != null) selection.unselect_all (); // As explained in cursor_changed(), we cannot emit signals for this special // case from there because that wouldn't allow us to implement the behavior // we want (i.e. restoring the old selection after expanding a previously // collapsed category) without emitting the undesired item_selected() signal // along the way. This special case is handled manually, because it *should* // only happen in response to client code requests and never in response to // user interaction. We do that here because there's no way to determine // whether the cursor change came from code (i.e. this method) or user // interaction from cursor_changed(). this.selected = null; item_selected (null); } else if (item.selectable) { if (scroll_to_item) this.scroll_to_item (item); var to_select = data_model.get_item_path (item); if (to_select != null) set_cursor_on_cell (to_select, get_column (Column.ITEM), text_cell, false); } } public override void cursor_changed () { var path = get_selected_path (); Item? new_item = path != null ? data_model.get_item_from_path (path) : null; // Don't do anything if @new_item is null. // // The only way 'this.selected' can be null is by setting it explicitly to // that value from client code, and thus we handle that case in set_selected(). // THIS CANNOT HAPPEN IN RESPONSE TO USER INTERACTION. For example, if an // item is un-selected because its parent category has been collapsed, then it will // remain as the current selected item (not in reality, just as the value of // this.selected) and will be re-selected after the parent is expanded again. // THIS ALL HAPPENS SILENTLY BEHIND THE SCENES, so client code will never know // it ever happened; the value of selected_item remains unchanged and item_selected() // is not emitted. if (new_item != null && new_item != this.selected) { this.selected = new_item; item_selected (new_item); } } public bool scroll_to_item (Item item, bool use_align = false, float row_align = 0) { bool scrolled = false; var path = data_model.get_item_path (item); if (path != null) { scroll_to_cell (path, null, use_align, row_align, 0); scrolled = true; } return scrolled; } public bool start_editing_item (Item item) requires (item.editable) requires (item.selectable) { if (editing && item == edited) // If same item again, simply return. return false; var path = data_model.get_item_path (item); if (path != null) { edited = item; text_cell.editable = true; set_cursor_on_cell (path, get_column (Column.ITEM), text_cell, true); } else { warning ("Could not edit \"%s\": path not found", item.name); } return editing; } public void stop_editing () { if (editing && edited != null) { var path = data_model.get_item_path (edited); // Setting the cursor on the same cell without starting an edit cancels any // editing operation going on. if (path != null) set_cursor_on_cell (path, get_column (Column.ITEM), text_cell, false); } } private void on_editing_started (Gtk.CellEditable editable, string path) { editable_entry = editable as Gtk.Entry; if (editable_entry != null) { editable_entry.editing_done.connect (on_editing_done); editable_entry.editable = true; } } private void on_editing_canceled () { if (editable_entry != null) { editable_entry.editable = false; editable_entry.editing_done.disconnect (on_editing_done); } text_cell.editable = false; edited = null; } private void on_editing_done () { if (edited != null && edited.editable && editable_entry != null) edited.edited (editable_entry.get_text ()); // Same actions as when canceling editing on_editing_canceled (); } private void on_activatable_activated (string item_path_str) { var item = get_item_from_path_string (item_path_str); if (item != null) item.action_activated (); } private Item? get_item_from_path_string (string item_path_str) { var item_path = new Gtk.TreePath.from_string (item_path_str); return data_model.get_item_from_path (item_path); } private bool toggle_expansion (ExpandableItem item) { if (item.collapsible) { item.expanded = !item.expanded; return true; } return false; } /** * Updates the tree to reflect the ''expanded'' property of expandable_item. */ public void update_expansion (ExpandableItem expandable_item) { var path = data_model.get_item_path (expandable_item); if (path != null) { // Make sure that the indentation cell for the item's level exists. // We use +1 because the method will make sure that the previous // indentation levels exist too. add_spacer_cell_for_level (path.get_depth () + 1); if (expandable_item.expanded) { expand_row (path, false); // Since collapsing an item un-selects any child item previously selected, // we need to restore the selection. This will be done silently because // set_selected checks for equality between the previously "selected" // item and the newly selected, and only emits the item_selected() signal // if they are different. See cursor_changed() for a better explanation // of this behavior. if (selected != null && selected.parent == expandable_item) set_selected (selected, true); // Collapsing expandable_item's row also collapsed all its children, // and thus we need to update the "expanded" property of each of them // to reflect their previous state. foreach (var child_item in expandable_item.children) { var child_expandable_item = child_item as ExpandableItem; if (child_expandable_item != null) update_expansion (child_expandable_item); } } else { collapse_row (path); } } } public override void row_activated (Gtk.TreePath path, Gtk.TreeViewColumn column) { if (column == get_column (Column.ITEM)) { var item = data_model.get_item_from_path (path); if (item != null) item.activated (); } } public override bool key_release_event (Gdk.EventKey event) { if (selected_item != null) { switch (event.keyval) { case Gdk.Key.F2: var modifiers = Gtk.accelerator_get_default_mod_mask (); // try to start editing selected item if ((event.state & modifiers) == 0 && selected_item.editable) start_editing_item (selected_item); break; } } return base.key_release_event (event); } public override bool button_press_event (Gdk.EventButton event) { if (event.window != get_bin_window ()) return base.button_press_event (event); Gtk.TreePath path; Gtk.TreeViewColumn column; int x = (int) event.x, y = (int) event.y, cell_x, cell_y; if (get_path_at_pos (x, y, out path, out column, out cell_x, out cell_y)) { var item = data_model.get_item_from_path (path); // This is needed because the treeview adds an offset at the beginning of every level Gdk.Rectangle start_cell_area; get_cell_area (path, get_column (0), out start_cell_area); cell_x -= start_cell_area.x; if (item != null && column == get_column (Column.ITEM)) { // Cancel any editing operation going on stop_editing (); if (((Gdk.Event*) (&event))->triggers_context_menu ()) { popup_context_menu (item, event); } else if (event.button == Gdk.BUTTON_PRIMARY) { // Check whether an expander (or an equivalent area) was clicked. bool is_expandable = item is ExpandableItem; bool is_category = is_expandable && data_model.is_category (item, null, path); if (event.type == Gdk.EventType.BUTTON_PRESS) { if (is_expandable) { // Checking for secondary_expander_cell is not necessary because the entire row // serves for this purpose when the item is a category or when the item is a // normal expandable item that is not selectable (special care is taken to // not break the activatable/action icons for such cases). // The expander only works like a visual indicator for these items. bool expander_clicked = is_category || over_primary_expander (column, path, cell_x) || (!item.selectable && !over_cell (column, path, activatable_cell, cell_x)); if (expander_clicked && toggle_expansion (item as ExpandableItem)) return true; } } else if (event.type == Gdk.EventType.2BUTTON_PRESS && !is_category // Main categories are *not* editable && item.editable && item.selectable && over_cell (column, path, text_cell, cell_x) && start_editing_item (item)) { // The user double-clicked over the text cell, and editing started successfully. return true; } } } } return base.button_press_event (event); } private bool over_primary_expander (Gtk.TreeViewColumn col, Gtk.TreePath path, int x) { Gtk.TreeIter iter; if (!model.get_iter (out iter, path)) return false; // Call the cell-data function and make it assign the proper visibility state to the cell expander_cell_data_func (col, primary_expander_cell, model, iter); if (!primary_expander_cell.visible) return false; // We want to return false if the cell is not expandable (i.e. the arrow is hidden) if (model.iter_n_children (iter) < 1) return false; // Now that we're sure that the item is expandable, let's see if the user clicked // over the expander area. We don't do so directly by querying the primary expander // position because it's not fixed, yielding incorrect coordinates depending on whether // a different area was re-drawn before this method was called. We know that the last // spacer cell precedes (in a LTR fashion) the expander cell. Because the position // of the spacer cell is fixed, we can safely query it. int indentation_level = path.get_depth (); var last_spacer_cell = spacer_cells[indentation_level]; if (last_spacer_cell != null) { int cell_x, cell_width; if (col.cell_get_position (last_spacer_cell, out cell_x, out cell_width)) { // Add a pixel so that the expander area is a bit wider int expander_width = get_cell_width (primary_expander_cell) + 1; if (Utils.is_left_to_right (this)) { int indentation_offset = cell_x + cell_width; return x >= indentation_offset && x <= indentation_offset + expander_width; } return x <= cell_x && x >= cell_x - expander_width; } } return false; } private bool over_cell (Gtk.TreeViewColumn col, Gtk.TreePath path, Gtk.CellRenderer cell, int x) { int cell_x, cell_width; bool found = col.cell_get_position (cell, out cell_x, out cell_width); return found && x > cell_x && x < cell_x + cell_width; } private int get_cell_width (Gtk.CellRenderer cell_renderer) { Gtk.Requisition min_req; cell_renderer.get_preferred_size (this, out min_req, null); return min_req.width; } public override bool popup_menu () { return popup_context_menu (null, null); } private bool popup_context_menu (Item? item, Gdk.EventButton? event) { if (item == null) item = selected_item; if (item != null) { var menu = item.get_context_menu (); if (menu != null) { var time = (event != null) ? event.time : Gtk.get_current_event_time (); var button = (event != null) ? event.button : 0; menu.attach_to_widget (this, null); if (event != null) { menu.popup (null, null, null, button, time); } else { menu.popup (null, null, menu_position_func, button, time); menu.select_first (false); } return true; } } return false; } /** * Positions a menu based on an item's coordinates. * * This function is only used for menu pop-ups triggered by events other than button * presses (e.g. key-press events). Since such events provide no coordinates, it is * assumed that the item in question is the one currently selected. */ private void menu_position_func (Gtk.Menu menu, out int x, out int y, out bool push_in) { push_in = true; x = y = 0; if (selected_item == null || !get_realized ()) return; var path = data_model.get_item_path (selected_item); if (path == null) return; // Try to find the position of the item Gdk.Rectangle item_bin_coords; get_cell_area (path, get_column (Column.ITEM), out item_bin_coords); int item_y = item_bin_coords.y + item_bin_coords.height / 2; int item_x = item_bin_coords.x; bool is_ltr = Utils.is_left_to_right (this); if (is_ltr) item_x += item_bin_coords.width - 6; int widget_x, widget_y; convert_bin_window_to_widget_coords (item_x, item_y, out widget_x, out widget_y); get_window ().get_origin (out x, out y); x += widget_x.clamp (0, get_allocated_width ()); y += widget_y.clamp (0, get_allocated_height ()); if (!is_ltr) { Gtk.Requisition menu_req; menu.get_preferred_size (out menu_req, null); y -= menu_req.width; } } private static Item? get_item_from_model (Gtk.TreeModel model, Gtk.TreeIter iter) { var data_model = model as DataModel; assert (data_model != null); return data_model.get_item (iter); } private static void spacer_cell_data_func (Gtk.CellLayout layout, Gtk.CellRenderer renderer, Gtk.TreeModel model, Gtk.TreeIter iter) { var spacer = renderer as CellRendererSpacer; assert (spacer != null); assert (spacer.level > 0); var path = model.get_path (iter); int level = -1; if (path != null) level = path.get_depth (); renderer.visible = spacer.level <= level; } private void name_cell_data_func (Gtk.CellLayout layout, Gtk.CellRenderer renderer, Gtk.TreeModel model, Gtk.TreeIter iter) { var text_renderer = renderer as Gtk.CellRendererText; assert (text_renderer != null); var text = new StringBuilder (); var weight = Pango.Weight.NORMAL; var item = get_item_from_model (model, iter); if (item != null) { text.append (item.name); if (data_model.is_category (item, iter)) weight = Pango.Weight.BOLD; } text_renderer.weight = weight; text_renderer.text = text.str; } private void badge_cell_data_func (Gtk.CellLayout layout, Gtk.CellRenderer renderer, Gtk.TreeModel model, Gtk.TreeIter iter) { var badge_renderer = renderer as CellRendererBadge; assert (badge_renderer != null); string text = ""; bool visible = false; var item = get_item_from_model (model, iter); if (item != null) { // Badges are not displayed for main categories visible = !data_model.is_category (item, iter) && item.badge != null && item.badge.strip () != ""; if (visible) text = item.badge; } badge_renderer.visible = visible; badge_renderer.text = text; } private void icon_cell_data_func (Gtk.CellLayout layout, Gtk.CellRenderer renderer, Gtk.TreeModel model, Gtk.TreeIter iter) { var icon_renderer = renderer as CellRendererIcon; assert (icon_renderer != null); bool visible = false; Icon? icon = null; var item = get_item_from_model (model, iter); if (item != null) { // Icons are not displayed for main categories visible = !data_model.is_category (item, iter); if (visible) { if (icon_renderer == icon_cell) icon = item.icon; else if (icon_renderer == activatable_cell) icon = item.activatable; else assert_not_reached (); } } visible = visible && icon != null; icon_renderer.visible = visible; icon_renderer.gicon = visible ? icon : null; } /** * Controls expander visibility. */ private void expander_cell_data_func (Gtk.CellLayout layout, Gtk.CellRenderer renderer, Gtk.TreeModel model, Gtk.TreeIter iter) { var item = get_item_from_model (model, iter); if (item != null) { // Gtk.CellRenderer.is_expander takes into account whether the item has children or not. // The tree-view checks for that and sets this property for us. It also sets // Gtk.CellRenderer.is_expanded, and thus we don't need to check for that either. var expandable_item = item as ExpandableItem; if (expandable_item != null) renderer.is_expander = renderer.is_expander && expandable_item.collapsible; } if (renderer == primary_expander_cell) renderer.visible = !data_model.is_iter_at_root_level (iter); else if (renderer == secondary_expander_cell) renderer.visible = data_model.is_category (item, iter); else assert_not_reached (); } } /** * Emitted when the source list selection changes. * * @param item Selected item; //null// if nothing is selected. * @since 0.2 */ public virtual signal void item_selected (Item? item) { } /** * A {@link Granite.Widgets.SourceList.SortFunc} should return a negative integer, zero, or a * positive integer if ''a'' sorts //before// ''b'', ''a'' sorts //with// ''b'', or ''a'' sorts * //after// ''b'' respectively. If two items compare as equal, their order in the sorted * source list is undefined. * * In order to ensure that the source list behaves as expected, the {@link Granite.Widgets.SourceList.SortFunc} * must define a partial order on the source list tree; i.e. it must be reflexive, antisymmetric and * transitive. * * (Same description as {@link Gtk.TreeIterCompareFunc}.) * * @param a First item. * @param b Second item. * @return A //negative// integer if //a// sorts after //b//, //zero// if //a// equals //b//, * or a //positive// integer if //a// sorts before //b//. * @since 0.2 */ [Deprecated (replacement = "ExpandableItem.compare", since = "0.2")] public delegate int SortFunc (Item a, Item b); /** * A {@link Granite.Widgets.SourceList.VisibleFunc} should return true if the item should be * visible; false otherwise. If //item//'s {@link Granite.Widgets.SourceList.Item.visible} * property is set to //false//, then it won't be displayed even if this method returns true. * * It is important to note that the method ''must not modify any property of //item//'', * because doing so would cause re-entrancy, because the widget's internal data model invokes the * method to filter an item again after every property change, resulting in an infinite chain * of recursive calls. * * Usually, modifying the {@link Granite.Widgets.SourceList.Item.visible} property is enough. * The advantage of using this method is that its nature is non-destructive, and the * changes it makes can be easily reverted (see {@link Granite.Widgets.SourceList.refilter}). * * @param item Item to be checked. * @return Whether //item// should be visible or not. * @since 0.2 */ public delegate bool VisibleFunc (Item item); /** * Root-level expandable item. * * This item contains the first-level source list items. It //only serves as an item container//. * It is used to add and remove items to/from the widget. * * Internally, it allows the source list to connect to its {@link Granite.Widgets.SourceList.ExpandableItem.child_added} * and {@link Granite.Widgets.SourceList.ExpandableItem.child_removed} signals in order to monitor * new children additions/removals. * * @since 0.2 */ public ExpandableItem root { get { return data_model.root; } set { data_model.root = value; } } /** * The current selected item. * * Setting it to //null// un-selects the previously selected item, if there was any. * {@link Granite.Widgets.SourceList.ExpandableItem.expand_with_parents} is called on the * item's parent to make sure it's possible to select it. * * @since 0.2 */ public Item? selected { get { return tree.selected_item; } set { if (value != null && value.parent != null) value.parent.expand_with_parents (); tree.selected_item = value; } } /** * Text ellipsize mode. * * @since 0.2 */ public Pango.EllipsizeMode ellipsize_mode { get { return tree.ellipsize_mode; } set { tree.ellipsize_mode = value; } } /** * Whether an item is being edited. * * @see Granite.Widgets.SourceList.start_editing_item * @since 0.2 */ public bool editing { get { return tree.editing; } } /** * Sort direction to use along with the sort function. * * @see Granite.Widgets.SourceList.set_sort_func * @since 0.2 */ public Gtk.SortType sort_direction { get { return data_model.sort_direction; } set { data_model.sort_direction = value; } } private Tree tree; private DataModel data_model = new DataModel (); /** * Creates a new {@link Granite.Widgets.SourceList}. * * @return A new {@link Granite.Widgets.SourceList}. * @since 0.2 */ public SourceList (ExpandableItem root = new ExpandableItem ()) { this.root = root; push_composite_child (); tree = new Tree (data_model); tree.set_composite_name ("treeview"); pop_composite_child (); set_policy (Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); add (tree); show_all (); tree.item_selected.connect ((item) => item_selected (item)); } /** * Checks whether //item// is part of the source list. * * @param item The item to query. * @return //true// if the item belongs to the source list; //false// otherwise. * @since 0.2 */ public bool has_item (Item item) { return data_model.has_item (item); } /** * Sets the method used for sorting items. * * @param sort_func The method to use for sorting items. * @see Granite.Widgets.SourceList.SortFunc * @since 0.2 */ [Deprecated (replacement = "ExpandableItem.compare", since = "0.2")] public void set_sort_func (owned SortFunc? sort_func) { data_model.set_sort_func ((owned) sort_func); } /** * Sets the method used for filtering out items. * * @param visible_func The method to use for filtering items. * @param refilter Whether to call {@link Granite.Widgets.SourceList.refilter} using the new function. * @see Granite.Widgets.SourceList.VisibleFunc * @see Granite.Widgets.SourceList.refilter * @since 0.2 */ public void set_filter_func (VisibleFunc? visible_func, bool refilter) { data_model.set_filter_func (visible_func); if (refilter) this.refilter (); } /** * Applies the filter method set by {@link Granite.Widgets.SourceList.set_filter_func} * to all the items that are part of the current tree. * * @see Granite.Widgets.SourceList.VisibleFunc * @see Granite.Widgets.SourceList.set_filter_func * @since 0.2 */ public void refilter () { data_model.refilter (); } /** * Queries the actual expansion state of //item//. * * @see Granite.Widgets.SourceList.ExpandableItem.expanded * @return Whether //item// is expanded or not. * @since 0.2 */ public bool is_item_expanded (Item item) requires (has_item (item)) { var path = data_model.get_item_path (item); return path != null && tree.is_row_expanded (path); } /** * If //item// is editable, this activates the editor; otherwise, it does nothing. * If an item was already being edited, this will fail. * * @param item Item to edit. * @see Granite.Widgets.SourceList.Item.editable * @see Granite.Widgets.SourceList.editing * @see Granite.Widgets.SourceList.stop_editing * @return true if the editing started successfully; false otherwise. * @since 0.2 */ public bool start_editing_item (Item item) requires (has_item (item)) { return tree.start_editing_item (item); } /** * Cancels any editing operation going on. * * @see Granite.Widgets.SourceList.editing * @see Granite.Widgets.SourceList.start_editing_item * @since 0.2 */ public void stop_editing () { if (editing) tree.stop_editing (); } /** * Scrolls the source list tree to make //item// visible. * * {@link Granite.Widgets.SourceList.ExpandableItem.expand_with_parents} is called * for the item's parent if //expand_parents// is //true//, to make sure it's not * hidden behind a collapsed row. * * If use_align is //false//, then the row_align argument is ignored, and the tree * does the minimum amount of work to scroll the item onto the screen. This means that * the item will be scrolled to the edge closest to its current position. If the item * is currently visible on the screen, nothing is done. * * @param item Item to scroll to. * @param expand_parents Whether to recursively expand item's parent in case they are collapsed. * @param use_align Whether to use the //row_align// argument. * @param row_align The vertical alignment of //item//. 0.0 means top, 0.5 center, and 1.0 bottom. * @return //true// if successful; //false// otherwise. * @since 0.2 */ public bool scroll_to_item (Item item, bool expand_parents = true, bool use_align = false, float row_align = 0) requires (has_item (item)) { if (expand_parents && item.parent != null) item.parent.expand_with_parents (); return tree.scroll_to_item (item, use_align, row_align); } /** * Gets the previous item with respect to //reference//. * * @param reference Item to use as reference. * @return The item that appears before //reference//, or //null// if there's none. * @since 0.2 */ public Item? get_previous_item (Item reference) requires (has_item (reference)) { // this will return null for root, so iter_n_children() will always work fine var iter = data_model.get_item_iter (reference); if (iter != null) { Gtk.TreeIter new_iter = iter; // workaround for valac 0.18 if (data_model.iter_previous (ref new_iter)) return data_model.get_item (new_iter); } return null; } /** * Gets the next item with respect to //reference//. * * @param reference Item to use as reference. * @return The item that appears after //reference//, or //null// if there's none. * @since 0.2 */ public Item? get_next_item (Item reference) requires (has_item (reference)) { // this will return null for root, so iter_n_children() will always work fine var iter = data_model.get_item_iter (reference); if (iter != null) { Gtk.TreeIter new_iter = iter; // workaround for valac 0.18 if (data_model.iter_next (ref new_iter)) return data_model.get_item (new_iter); } return null; } /** * Gets the first visible child of an expandable item. * * @param parent Parent of the child to look up. * @return The first visible child of //parent//, or null if it was not found. * @since 0.2 */ public Item? get_first_child (ExpandableItem parent) { return get_nth_child (parent, 0); } /** * Gets the last visible child of an expandable item. * * @param parent Parent of the child to look up. * @return The last visible child of //parent//, or null if it was not found. * @since 0.2 */ public Item? get_last_child (ExpandableItem parent) { return get_nth_child (parent, (int) get_n_visible_children (parent) - 1); } /** * Gets the number of visible children of an expandable item. * * @param parent Item to query. * @return Number of visible children of //parent//. * @since 0.2 */ public uint get_n_visible_children (ExpandableItem parent) { // this will return null for root, so iter_n_children() will always work properly. var parent_iter = data_model.get_item_iter (parent); return data_model.iter_n_children (parent_iter); } private Item? get_nth_child (ExpandableItem parent, int index) { if (index < 0) return null; // this will return null for root, so iter_nth_child() will always work properly. var parent_iter = data_model.get_item_iter (parent); Gtk.TreeIter child_iter; if (data_model.iter_nth_child (out child_iter, parent_iter, index)) return data_model.get_item (child_iter); return null; } } granite-0.3.0/po/et.po000644 001750 001750 00000014114 12340443640 016236 0ustar00shnatselshnatsel000000 000000 # Estonian translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-13 13:48+0000\n" "Last-Translator: Kristjan Vool \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-14 06:45+0000\n" "X-Generator: Launchpad (build 16963)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Arendajad" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Veebileht" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Aita tõlkida" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Teata probleemist" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Sulge kaart" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Ava uues aknas" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Dubleeri" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Sulge teine kaart" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Sulge teised kaardid" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Puhasta kõik" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Uus kaart" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Taasava suletud kaart" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Suletud kaardid" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Contractor'iga polnud võimalik ühendust luua. Palun kontroll Contractor'i " "paigaldust ning vajadusel paigalda see." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Toimingut selle faili jaoks ei leitud" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menüü" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Rakendusest..." #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "Pärast lõunat:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%A, %e. %b, %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%e. %b, %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%e. %b" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%A, %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%A" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%A, %e. %b" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Disainerid:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Programmeerijad:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Autoriõigused © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumenteerijad:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Tõlkijad: %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Sulge" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "See rakendus on avaldatud " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " litsentsitingimustega ning igasugune garantii puudub; täpsemate detailide " "jaoks külasta lehte " granite-0.3.0/po/ko.po000644 001750 001750 00000013774 12340443640 016252 0ustar00shnatselshnatsel000000 000000 # Korean translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-01-03 03:10+0000\n" "Last-Translator: MinSik CHO \n" "Language-Team: Korean \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "만든 사람들" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "웹 사이트" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "이 프로그램 번역" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "문제 보고" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "탭 닫기" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "새 창에서 열기" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "복제" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "다른 탭 닫기" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "다른 탭 닫기" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "모두 지우기" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "새 탭" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "닫힌 탭 다시 열기" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "닫힌 탭" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Contractor에 연결할 수 없습니다. 이 프로그램을 설치해야 합니다." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "이 파일로 수행할 동작이 없습니다." #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "메뉴" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "정보" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%p %l:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "디자인:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "코드 작성:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "문서 작성:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "번역 %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "닫기" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "이 프로그램은 다음 라이선스 하에 배포합니다. " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " 이 프로그램은 어떤 것도 보증하지 않습니다; 자세한 내용은 다음 사이트를 참조하십시오. " granite-0.3.0/po/ta.po000644 001750 001750 00000015765 12340443640 016247 0ustar00shnatselshnatsel000000 000000 # Tamil translation for granite # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-23 12:37+0000\n" "Last-Translator: SyedKhaleel Jageer \n" "Language-Team: Tamil \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-24 06:23+0000\n" "X-Generator: Launchpad (build 16967)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "உருவாக்குவோர்" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "வலைத்தளம்" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "இந்த பயன்பாட்டை மொழிபெயர்" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "பிரச்சனையை புகார் செய்" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "தத்தலை மூடுக" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "புதிய சாளரத்தில் திற" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "நகல்பிரதியெடு" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "பிற தாவலை மூடு" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "பிற தாவல்களை மூடுக" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "அனைத்தையும் துடை" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "புதிய கீற்று" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "மூடிய தாவலை மீளமை" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "மூடப்பட்ட தாவல்" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "ஒப்பந்ததாரரை தொடர்பு கொள்ள முடியவில்லை. நீங்களாக இதை நிறுவ வேண்டும்" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "இந்த கோப்பில் நடவடிக்கை ஏதும் காணப்படவில்லை" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "பட்டி" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "பற்றி" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "பிப:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%b %e" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %b %e" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "வடிவமைத்தவர்:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "எழுதியவர்:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "பதிப்புரிமை © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "ஆவணமாக்கியவர்:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "%s மூல மொழிபெயர்க்கப்பட்டது" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "மூடு" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "இந்த பயன்பாடு நிபந்தனைகளின் கீழ் வெளியிடப்பட்டது " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " உரிமம், அது முற்றிலும் உத்திரவாதம் இல்லாமல் வருகிறது; விவரங்களுக்கு, விஜயம் " granite-0.3.0/po/sv.po000644 001750 001750 00000014042 12340443640 016256 0ustar00shnatselshnatsel000000 000000 # Swedish translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-04-09 10:01+0000\n" "Last-Translator: Emil Andersson \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-04-10 06:03+0000\n" "X-Generator: Launchpad (build 16976)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Utvecklare" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Webbplats" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Översätt det här programmet" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Rapportera ett problem" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Stäng flik" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Öppna i ett nytt fönster" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplicera" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Stäng annan flik" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Stäng övriga flikar" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Rensa allt" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Ny flik" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Ångra stängning av flik" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Stängda flikar" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Kan inte kontakta Contractor. Du kan behöva installera programmet." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Kunde inte hitta någon möjlig handling för den här filen" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Meny" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Om" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "EM:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "." #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l.%M.%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%k.%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H.%M.%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H.%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%b %e" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %b %e" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Formgiven av:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Skriven av:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumenterad av:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Översatt av %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Stäng" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Det här programmet är utgivet under vilkoren i " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " licensen, och ges INGEN SOM HELST GARANTI; för detaljer, besök " granite-0.3.0/po/CMakeLists.txt000644 001750 001750 00000000211 12340443640 020017 0ustar00shnatselshnatsel000000 000000 include (Translations) add_translations_directory ("${GETTEXT_PACKAGE}") add_translations_catalog ("${GETTEXT_PACKAGE}" ../lib/ ../demo/)granite-0.3.0/po/zh_CN.po000644 001750 001750 00000013563 12340443640 016636 0ustar00shnatselshnatsel000000 000000 # Chinese (Simplified) translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-01-19 03:08+0000\n" "Last-Translator: Wang Dianjin \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "开发者" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "网站" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "翻译该应用" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "报告问题" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "关闭标签" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "在新窗口中打开" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "复制" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "关闭其他标签页" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "关闭其他标签页" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "全部清除" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "新标签" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "撤消关闭标签" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "已关闭的标签" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "无法联系 Contractor。您可能需要安装它。" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "未发现该文件的动作" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "菜单" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "关于" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%p%l:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "设计师:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "作者:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "版权所有 © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "文档:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "翻译人员:%s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "关闭" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "该程序发布遵循 " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " 协议,它没有任何担保;更多细节,访问 " granite-0.3.0/po/it.po000644 001750 001750 00000013767 12340443640 016257 0ustar00shnatselshnatsel000000 000000 # Italian translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-01-25 11:08+0000\n" "Last-Translator: Bennici Piercarlo \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Sviluppatori" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Sito web" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Traduci questa applicazione" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Segnala un problema" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Chiudi scheda" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Apri in una nuova finestra" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplica" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Chiudi altra scheda" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Chiudi altre schede" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Cancella tutto" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nuova scheda" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Annulla chiudi scheda" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Schede chiuse" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Non è possibile contattare Contractor. Potrebbe essere necessario installarlo" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Nessuna azione trovata per questo file" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Informazioni" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l.%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Progettato da:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Scritto da:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documentato da:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Tradotto da %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Chiudi" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Questo programma è pubblicato secondo i termini della licenza " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " e distribuito SENZA ALCUNA GARANZIA; per ulteriori dettagli visitare " granite-0.3.0/po/bs.po000644 001750 001750 00000012667 12340443640 016245 0ustar00shnatselshnatsel000000 000000 # Bosnian translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2012-05-14 21:07+0000\n" "Last-Translator: Samir Ribić \n" "Language-Team: Bosnian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Meni" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "O" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/granite.pot000644 001750 001750 00000012504 12340443640 017444 0ustar00shnatselshnatsel000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/de.po000644 001750 001750 00000014127 12340443640 016222 0ustar00shnatselshnatsel000000 000000 # German translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-04-15 13:47+0000\n" "Last-Translator: Simeon \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-04-16 06:50+0000\n" "X-Generator: Launchpad (build 16976)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Entwickler" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Webseite" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Übersetzen" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Problem melden" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Tab schließen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "In neuem Fenster öffnen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Verdoppeln" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Anderen Tab schließen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Andere Tabs schließen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Alle löschen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Neuer Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Geschlossenen Tab wieder öffnen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Geschlossene Tabs" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Konnte keine Verbindung zu Contractor herstellen. Sie müssen es " "möglicherweise erst installieren." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Mit dieser Datei ist keine Aktion verknüpft" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menü" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Über" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "Nachmittags:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a, %e. %b. %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%e. %b. %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%d. %b" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a, %e. %b." #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%B" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Design von:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Geschrieben von:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumentiert von:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Übersetzt von %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Schließen" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Dieses Programm wurde unter den Bedingungen der " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " Lizenz veröffentlicht. Es wird ABSOLUT KEINE GARANTIE übernommen. Details " "finden Sie unter " granite-0.3.0/po/ro.po000644 001750 001750 00000013634 12340443640 016254 0ustar00shnatselshnatsel000000 000000 # Romanian translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-03-05 20:30+0000\n" "Last-Translator: Richard B. \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Website" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Tradu această aplicație" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Raportează o Problemă" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Închide fila" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Deschide într-o fereastră nouă" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplichează" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Închide cealaltă filă" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Închide celelalte file" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Filă nouă" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Nu pot contacta Contractor. Va trebui sa îl instalezi." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Nici o acțiune găsită pentru acest fișier" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Meniu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Despre" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Proiectat de:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Scris de:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documentat de:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Tradus de %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Acest program este publicat în conformitate cu condiţiile de " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " licență, acesta vine cu ABSOLUT NICI O GARANȚIE; pentru detalii, vizitați " granite-0.3.0/po/eo.po000644 001750 001750 00000013355 12340443640 016237 0ustar00shnatselshnatsel000000 000000 # Esperanto translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2012-08-15 14:51+0000\n" "Last-Translator: Michael Moroni \n" "Language-Team: Esperanto \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Traduki ĉi tiun aplikaĵon" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Raporti problemon" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Fermi langeton" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Contractor ne kontakteblas. Vi eble bezonas instali ĝin" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Ne ago trovata por ĉi tiu dosiero" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menuo" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Pri" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Ĉi tiu programaro estas publikigita sub la terminoj de la permesilo " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " . Ĝi estas publikigita SEN IA AJN GARANTIO. Por detaloj, vizitu " granite-0.3.0/po/sma.po000644 001750 001750 00000012672 12340443640 016415 0ustar00shnatselshnatsel000000 000000 # Southern Sami translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2012-07-11 14:01+0000\n" "Last-Translator: Skandee \n" "Language-Team: Southern Sami \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/hi.po000644 001750 001750 00000014255 12340443640 016234 0ustar00shnatselshnatsel000000 000000 # Hindi translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-04-14 14:54+0000\n" "Last-Translator: Shubham Kanodia \n" "Language-Team: Hindi \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "वेबसाइट" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "एप्लिकेशन का अनुवाद करें ।" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "समस्या का वर्णन करें।" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "टैब बंद करें" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "नए विंडो में खोलें" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "प्रतिलिपि(डुप्लीकेट)" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "दूसरा टैब बंद करें" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "अन्य टैब बंद करें" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "नया टैब" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "व्यवस्थापक से संपर्क करें नहीं किया जा सका। इसे इनस्टॉल करने की आवश्यकता हो " "सकती है।" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "सूची" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "जानकारी" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "डिज़ाइन करने वाले:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "लेखक:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "कॉपीराइट ©%s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/pt_BR.po000644 001750 001750 00000013766 12340443640 016650 0ustar00shnatselshnatsel000000 000000 # Brazilian Portuguese translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-01-16 18:50+0000\n" "Last-Translator: Leonardo Lemos \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Desenvolvedores" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Website" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Traduzir este aplicativo" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Relatar um problema" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Fechar aba" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Abrir uma nova janela" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplicar" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Fechar outra aba" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Fechar outras abas" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Limpar tudo" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nova aba" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Desfazer aba fechada" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Abas fechadas" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Não foi possível contactar Contractor. Você pode precisar instalá-lo" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Nenhuma ação encontrada para este arquivo" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Sobre" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Projetado por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Escrito por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Direitos autorais © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documentado por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Traduzido por %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Fechar" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Este programa é publicado sob os termos da licença " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " licença, ela vem com ABSOLUTAMENTE NENHUMA GARANTIA; para detalhes, visite " granite-0.3.0/po/hu.po000644 001750 001750 00000014072 12340443640 016245 0ustar00shnatselshnatsel000000 000000 # Hungarian translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-04-20 12:54+0000\n" "Last-Translator: Mark Lutring \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-04-21 04:57+0000\n" "X-Generator: Launchpad (build 16985)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Fejlesztők" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Weblap" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Alkalmazás fordítása" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Hibajelentés" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Lap bezárása" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Megnyitás új ablakban" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplikálás" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Másik lap bezárása" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "A többi lap bezárása" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Az összes törlése" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Új lap" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Lap bezárásának visszavonása" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Bezárt lapok" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Nem sikerült a Contractorhoz kapcsolódni. Lehet, hogy telepítenie kell." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Nem található művelet a fájlhoz" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menü" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Névjegy" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "du." #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%p %l.%M.%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%k.%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H.%M.%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H.%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%Y. %b. %e., %a" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%Y. %b. %e." #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%b. %e." #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%Y, %a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%b. %e., %a" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Tervezte:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Írta:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumentálta:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Fordította: %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Bezárás" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Ez a program a " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " licenc feltételeinek megfelelően került kiadásra, melyre nem vonatkozik " "SEMMILYEN GARANCIA; részletekért lásd: " granite-0.3.0/po/en_GB.po000644 001750 001750 00000013735 12340443640 016610 0ustar00shnatselshnatsel000000 000000 # English (United Kingdom) translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-04-07 21:01+0000\n" "Last-Translator: Alfredo Hernández \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-04-08 06:50+0000\n" "X-Generator: Launchpad (build 16976)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Developers" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Website" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Translate This App" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Report a Problem" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Close Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Open in a new window" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplicate" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Close Other Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Close Other Tabs" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Clear All" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "New Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Undo Close Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Closed Tabs" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Could not contact Contractor. You may need to install it" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "No action found for this file" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "About" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "PM:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %e %b %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%e %b %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%e %b" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %e %b" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Designed by:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Written by:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documented by:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Translated by %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Close" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "This program is published under the terms of the " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " granite-0.3.0/po/lb.po000644 001750 001750 00000013665 12340443640 016235 0ustar00shnatselshnatsel000000 000000 # Luxembourgish translation for granite # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-03-23 13:16+0000\n" "Last-Translator: Julien Spautz \n" "Language-Team: Luxembourgish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Sit" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Dës App iwwersetzen" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Problem mellen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Tab zoumaachen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "An neier Fënster opmaachen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplizéieren" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Aneren Tab schléissen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Aner Tabs schléissen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Neien Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Contractor konnt net kontaktéiert ginn. Dir musst et eventuell nach " "installéieren" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Keng Aktioun fir dës Datei fonnt" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menü" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Iwwert" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Designed vun:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Geschriwwe vun:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documentéiert vun:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Iwwersat vun: %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Dës Program gouf verëffentlecht ënnert der " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " Lizenz, et kënnt mat ABSOLUT KENGER GARANTIE; fir méi Informatiounen " "besicht " granite-0.3.0/po/pl.po000644 001750 001750 00000014144 12340443640 016244 0ustar00shnatselshnatsel000000 000000 # Polish translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-06 14:03+0000\n" "Last-Translator: Piotr Strębski \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-07 07:07+0000\n" "X-Generator: Launchpad (build 16948)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Programiści" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Witryna internetowa" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Przetłumacz ten program" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Zgłoś błąd" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Zamknij kartę" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Otwórz w nowym oknie" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplikuj" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Zamknij pozostałą kartę" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Zamknij pozostałe karty" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Wyczyść wszystko" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nowa karta" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Przywróć zamkniętą kartę" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Zamknięte karty" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Nie można połączyć z programem Contractor. Być może należy go zainstalować." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Nie odnaleziono czynności dla tego pliku" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Rozwija menu poleceń" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "O programie" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%k:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H∶%M∶%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H∶%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Zaprojektowany przez:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Napisany przez:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Udokumentowany przez:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Przetłumaczony przez %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Zamknij" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Program ten został opublikowany na warunkach licencji " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " , jest dostarczony ABSOLUTNIE BEZ ŻADNEJ GWARANCJI; szczegóły można znaleźć " "na stronie " granite-0.3.0/po/ms.po000644 001750 001750 00000013705 12340443640 016252 0ustar00shnatselshnatsel000000 000000 # Malay translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-10 06:24+0000\n" "Last-Translator: abuyop \n" "Language-Team: Malay \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-11 05:57+0000\n" "X-Generator: Launchpad (build 16948)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Pembangun" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Laman Sesawang" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Terjemah Aplikasi Ini" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Laporkan Masalah" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Tutup Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "BUka dalam Tetingkap baru" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Gandakan" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Tutup Tab Lain" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Tutup Tab Lain" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Kosongkan Semua" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Tab Baru" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Buat Asal Tutup Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Tab Ditutup" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Tidak dapat hubungi Contractor, anda perlu pasang ia" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Tiada tindakan ditemui untuk fail ini" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Perihal" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "PM:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%b %e" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %b %e" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Direka oleh:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Ditulis oleh:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Hakcipta © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Didokumentasi oleh:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Diterjemah oleh %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Tutup" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Program ini diterbitkan dibawah terma " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " lesen, ia TIDAK disertakan dengan JAMINAN; untuk perincian, lawati " granite-0.3.0/po/uk.po000644 001750 001750 00000014626 12340443640 016255 0ustar00shnatselshnatsel000000 000000 # Ukrainian translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-05-02 08:47+0000\n" "Last-Translator: Max_ym \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-05-03 06:36+0000\n" "X-Generator: Launchpad (build 16985)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Розробники" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Веб-сторінка" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Перекласти цю Програму" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Повідомити про Проблему" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Закрити Вкладку" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Відкрити в Новому Вікні" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Дублювати" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Закрити Іншу Вкладку" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Закрити Інші Вкладки" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Очистити Все" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Нова Вкладка" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Скасувати Закриття Вкладки" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Закриті Вкладки" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Не вдалося зв'язатися з Contractor. Можливо його треба встановити" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Для цього файлу не знайдено дій" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Меню" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Про Програму…" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%b %e" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %b %e" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Дизайн:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Автор:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Ліцензовано© %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Документація:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Переклад:%s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Закрити" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Ця програма розповсюджується на умовах " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " ліцензії, поставляється БЕЗ БУДЬ-ЯКИХ ГАРАНТІЙ; подробиці на " granite-0.3.0/po/zh_TW.po000644 001750 001750 00000013760 12340443640 016667 0ustar00shnatselshnatsel000000 000000 # Chinese (Traditional) translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-16 07:25+0000\n" "Last-Translator: Cheng-Chia Tseng \n" "Language-Team: Chinese (Traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-17 05:00+0000\n" "X-Generator: Launchpad (build 16963)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "開發者" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "網站" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "翻譯此程式" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "回報問題" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "關閉分頁" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "以新視窗開啟" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "再製" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "關閉其他分頁" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "關閉其他分頁" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "全部清除" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "新增分頁" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "重新開啟關閉的分頁" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "關閉的分頁" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "無法聯絡 Contractor。您可能需要安裝它" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "沒有動作找到這檔案" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "選單" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "關於" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "下午:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%p %l:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%p %l:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%Y年%m月%d日 (%a)" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%Y年%m月%d日" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y年" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%b%e日" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%Y年,%A" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%A" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%b%e日 (%a)" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "設計:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "撰寫:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "著作權 © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "文件:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "翻譯:%s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "關閉" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "本程式是基於 " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " 授權條款發布,「絕對沒有任何保證」,詳情請參照 " granite-0.3.0/po/tr.po000644 001750 001750 00000013762 12340443640 016263 0ustar00shnatselshnatsel000000 000000 # Turkish translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-04-01 21:40+0000\n" "Last-Translator: Çağdaş Alagöz \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-04-02 06:08+0000\n" "X-Generator: Launchpad (build 16967)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Geliştiriciler" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Web sitesi" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Bu uygulamayı çevir" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Sorun Bildir" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Sekmeyi Kapat" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Yeni pencerede aç" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Çoğalt" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Diğer Sekmeyi Kapat" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Diğer Sekmeleri Kapat" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Tümünü Temizle" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Yeni Sekme" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Kapanan Sekmeyi Tekrar Aç" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Kapatılan Sekmeler" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Contractor'a erişilemedi. Yüklemeniz gerekebilir." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Bu dosya için eylem bulunamadı" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menü" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Hakkında" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Tasarlayan:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Yazan:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Telif hakları © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Belgeleyen:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Çeviri %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Bu program şartları altında yayınlanmaktadır " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " lisansının koşulları altında yayınlanmıştır, size HİÇBİR GARANTİ " "vermemektedir; detaylar için şurayı ziyaret edin: " granite-0.3.0/po/ja.po000644 001750 001750 00000013760 12340443640 016226 0ustar00shnatselshnatsel000000 000000 # Japanese translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-01-25 15:09+0000\n" "Last-Translator: Joji Bronner \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "ウェブサイト" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "このアプリを翻訳する" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "問題点を報告する" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "タブを閉じる" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "他のタブを閉じる" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "他のタブを閉じる" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "新しいタブ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "業者に連絡出来ませんでした。インストールする必要が有るかもしれません" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "このファイルに対して作用することが見つかりませんでした" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "メニュー" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "このアプリケーションについて" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%p %l:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "デザイナー:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "作家:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "執筆者" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "このプログラムは、ご存知の条件の下で公開されている: " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " 認可は無保証です。詳しくはこちらへ: " granite-0.3.0/po/en_CA.po000644 001750 001750 00000013602 12340443640 016574 0ustar00shnatselshnatsel000000 000000 # English (Canada) translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-04-16 07:23+0000\n" "Last-Translator: Shawn McTear \n" "Language-Team: English (Canada) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-04-17 06:26+0000\n" "X-Generator: Launchpad (build 16985)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Developers" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Website" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Translate This App" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Report a Problem" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Close Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Open in a new Window" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplicate" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Close Other Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Close Other Tabs" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Clear All" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "New Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Undo Close Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Closed Tabs" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Could not contact Contractor. You may need to install it" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "No action found for this file" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "About" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "PM:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Designed by:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Written by:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documented by:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Translated by %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "This program is published under the terms of the " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " licence, it comes with ABSOLUTELY NO WARRANTY; for details, visit " granite-0.3.0/po/he.po000644 001750 001750 00000014057 12340443640 016230 0ustar00shnatselshnatsel000000 000000 # Hebrew translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-05-25 03:14+0000\n" "Last-Translator: Uri Damsker \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "אתר אינטרנט" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "תרגם ישום זה" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "דיווח על שגיאה" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "סגירת לשונית" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "פתיחה בחלון חדש" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "שכפול" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "סגירת לשונית אחרת" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "סגירת לשוניות אחרות" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "לשונית חדשה" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "לא התאפשר קשר עם Contractor. יתכן שיש צורך להתקינו." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "לא נמצאה פעולה לקובץ זה" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "תפריט" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "אודות" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "עוצב על ידי:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "נכתב על ידי:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "זכות יוצרים © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "תועד על ידי:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "תורגם על ידי %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "תוכנה זו יצאה לאור בהתאם לתנאי השימוש של % " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " הרשיון הינו ללא אחריות. לפרטים נא לפנות ל % " granite-0.3.0/po/fy.po000644 001750 001750 00000013130 12340443640 016241 0ustar00shnatselshnatsel000000 000000 # Frisian translation for granite # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-02-25 17:09+0000\n" "Last-Translator: Eddie Gjaltema \n" "Language-Team: Frisian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Ljepper slute" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplisearje" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Alle oare ljeppers slute" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nije ljepper" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Oer" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Auteursrjocht © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Fertaalwurk troch %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " Lisinsje, 't komt mei ABSOLÚT GJIN GARÂNSJE; foar details, besykje " granite-0.3.0/po/lv.po000644 001750 001750 00000013756 12340443640 016262 0ustar00shnatselshnatsel000000 000000 # Latvian translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-11-03 21:22+0000\n" "Last-Translator: Matiss Roberts Treinis \n" "Language-Team: Latvian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Izstrādātāji" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Tīmekļa vietne" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Tulkot šo aplikāciju" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Ziņot par problēmu" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Aizvērt cilni" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Atvērt jaunā logā" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Dublēt" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Aizvērt citu cilni" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Aizvērt pārējās cilnes" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Jauna cilne" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Atcelt cilnes aizvēršanu" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Aizvērtās cilnes" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Nevarēja savienoties ar Contractor. Iespējams, to nepieciešams instalēt" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Šim failam nav reģistrētu darbību" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Izvēlne" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Par" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Dizaina izstrdādātājs" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Autors:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Autortiesības © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumentējis" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Tulkojums no %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Šī programmatūra ir licencēta izmantojot " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " licenci, tā ir bez JEBKĀDAS GARANTIJAS; vairāk informācijas iespējams iegūt " granite-0.3.0/po/bg.po000644 001750 001750 00000014605 12340443640 016223 0ustar00shnatselshnatsel000000 000000 # Bulgarian translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-04-23 20:30+0000\n" "Last-Translator: ITPROJECTS \n" "Language-Team: Bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-04-24 06:18+0000\n" "X-Generator: Launchpad (build 16985)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Разработчци" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Интернет Страница" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Преведи това приложение" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Докладвай проблем" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Затвори разделът" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Отвори в нов Прозорец" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Удвои" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Затвори другия раздел" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Затвори другите раздели" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Изчисти Всичко" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Нов раздел" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Отмени затварянето на подпрозореца" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Затворени подпрозорци" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Не може да се свърже с Contractor. Трябва да го инсталирате" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Няма валидни действия за този файл" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Меню" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "За" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "след обяд:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%k:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%b %e" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %b %e" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Дизайнер:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Написана от:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "© %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Документация:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Превод: %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Затвори" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Тази програма е публикувана под условията на " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " лиценз, който е БЕЗ ГАРАНЦИЯ; за детайли, посетете " granite-0.3.0/po/nb.po000644 001750 001750 00000014011 12340443640 016221 0ustar00shnatselshnatsel000000 000000 # Norwegian Bokmal translation for granite # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-05-04 18:55+0000\n" "Last-Translator: kingu \n" "Language-Team: Norwegian Bokmal \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-05-05 05:48+0000\n" "X-Generator: Launchpad (build 16985)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Utviklere" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Nettsted" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Oversett denne applikasjonen" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Rapportér et problem" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Lukk fane" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Åpne i nytt vindu." #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Lag kopi" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Lukk annen fane" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Lukk andre faner" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Fjern alt" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Ny fane" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Angre lukking av fane" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Lukkede faner" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Fikk ikke kontakt med Contractor. Du behøver kanskje å installere det?" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Fant ingen handling for denne filen" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Meny" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Om" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "." #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l.%M.%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%b %e" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %b %e" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Formgivning av:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Skrevet av:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Kopirett © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumentasjon ved:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Oversettelse ved %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Lukk" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Dette programmet er underlagt vilkårende i " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " lisensen, det medfølger ABSOLUTT INGEN GARANTI; for flere detaljer, besøk " granite-0.3.0/po/eu.po000644 001750 001750 00000013724 12340443640 016245 0ustar00shnatselshnatsel000000 000000 # Basque translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-01-06 21:25+0000\n" "Last-Translator: Ibai Oihanguren Sala \n" "Language-Team: Basque \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Garatzaileak" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Webgunea" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Itzuli aplikazio hau" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Arazo baten berri eman" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Itxi fitxa" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Ireki leiho berri batean" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Bikoiztu" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Itxi beste fitxa" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Itxi beste fitxak" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Garbitu guztia" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Fitxa berria" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Desegin fitxa ixtea" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Itxitako fitxak" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Ezin izan da Contractor-ekin kontaktatu. Behar bada instalatu beharko duzu" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Ez da ekintzarik aurkitu fitxategi honentzat" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menua" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Honi buruz" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Diseinatzailea:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Programatzailea:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumentatzailea:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Itzultzailea(k): %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Itxi" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Programa hau " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " lizentziaren baldintzei loturik argitaratu da, eta INONGO BERMERIK GABE; " "xehetasun gehiagorako bisitatu " granite-0.3.0/po/nn.po000644 001750 001750 00000013373 12340443640 016247 0ustar00shnatselshnatsel000000 000000 # Norwegian Nynorsk translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-04-28 17:55+0000\n" "Last-Translator: kingu \n" "Language-Team: Norwegian Nynorsk \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-04-29 06:30+0000\n" "X-Generator: Launchpad (build 16985)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Oversett denne appen" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Rapporter eit problem" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Lukk fane" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Åpne i eit nytt vindauge" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Lag kopi" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Ny fane" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Kunne ikkje kontakte Contractor. Du må installere Contractor" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Fant ingen handling for denne fila" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Meny" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Om" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "." #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Denne appen er publisert under vilkårene i " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " lisens, kommer med ingen garantier; for mer informasjon, besøk " granite-0.3.0/po/ug.po000644 001750 001750 00000013621 12340443640 016243 0ustar00shnatselshnatsel000000 000000 # Uyghur translation for granite # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-03-20 04:04+0000\n" "Last-Translator: Gheyret T.Kenji \n" "Language-Team: Uyghur \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "تورتۇرا" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "بۇ پروگراممىنى تەرجىمە قىلىمەن" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "مەسىلە مەلۇم قىل" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "بەتكۈچ ياپ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "يېڭى كۆزنەكتە ئاچ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "كۆپەيت" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "باشقا بەتكۈچنى ياپ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "باشقا بەتكۈچلەرنى ياپ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "يېڭى بەتكۈچ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "مەزكۇر ھۆججەتكە تەۋە مەشغۇلات تېپىلمىدى" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "تىزىملىك" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "ھەققىدە" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "لايىھىلىگۈچى:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "يازغۇچى:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "نەشر ھوقۇقى© %s غا تەۋە" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "پۈتۈكچى :" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "تەرجىمان %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/be.po000644 001750 001750 00000013221 12340443640 016212 0ustar00shnatselshnatsel000000 000000 # Belarusian translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2012-11-19 11:12+0000\n" "Last-Translator: Nick \n" "Language-Team: Belarusian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Закрыць укладку" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Адкрыць у новым акне" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Дубляваць" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Новая ўкладка" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Не ўдаецца звязацца з Contractor. Магчыма, вам неабходна ўсталяваць яго" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/id.po000644 001750 001750 00000013503 12340443640 016223 0ustar00shnatselshnatsel000000 000000 # Indonesian translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-03-09 15:22+0000\n" "Last-Translator: Dani Pratomo \n" "Language-Team: Indonesian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Situs Web" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Terjemahkan Apl Ini" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Laporkan Masalah" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Tutup Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Buka di Jendela baru" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Gandakan" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Tutup Tab Lainnya" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Tutup Tab Lainnya" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Tab Baru" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Tak tersambung ke Contractor. Anda perlu memasangnya" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Tidak ada aksi untuk berkas ini" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Keterangan" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Didesain oleh:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Ditulis oleh:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Hak Cipta © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Didokumentasikan oleh:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Diterjemahkan oleh %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Program ini diterbitkan di bawah ketentuan lisensi " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " , TANPA GARANSI; lebih lengkap, kunjungi " granite-0.3.0/po/fr.po000644 001750 001750 00000014122 12340443640 016234 0ustar00shnatselshnatsel000000 000000 # French translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-04-24 13:43+0000\n" "Last-Translator: Corentin Noël \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-04-25 06:39+0000\n" "X-Generator: Launchpad (build 16985)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Développeurs" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Site web" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Traduire cette application" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Signaler un problème" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Fermer l’onglet" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Ouvrir dans une nouvelle fenêtre" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Dupliquer" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Fermer l'autre onglet" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Fermer les autres onglets" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Tout effacer" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nouvel onglet" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Réouvrir l'onglet fermé" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Onglets fermés" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Impossible d'accéder à Contractor. Vous avez peut-être besoin de l'installer." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Aucune action n'a été trouvée pour ce fichier" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "À propos" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "PM :" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %e %b %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%e %b %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%e %b" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %e %b" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Conçu par :" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Développé par :" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documenté par :" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Traduit par %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Fermer" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Ce programme est publié conformément à la licence " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " , il est distribué SANS AUCUNE GARANTIE; pour plus de détails, visitez " granite-0.3.0/po/am.po000644 001750 001750 00000014520 12340443640 016224 0ustar00shnatselshnatsel000000 000000 # Amharic translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-26 15:57+0000\n" "Last-Translator: samson \n" "Language-Team: Amharic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-27 08:00+0000\n" "X-Generator: Launchpad (build 16967)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "አደራጆች" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "ድህረ ገጽ" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "ይህን መተግበሪያ ይተርጉሙ" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "ችግሩን ያሳውቁን" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "ንዑስ መስኮቱን መዝጊያ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "አዲስ መስኮት መክፈቻ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "ማባዣ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "ሌሎቹን ንዑስ መስኮቶች መዝጊያ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "ሌሎቹን ንዑስ መስኮቶች መዝጊያ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "ሁሉንም ማጽጃ" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "አዲስ ንዑስ መስኮት" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "የተዘጋውን ንዑስ መክፈቻ መተው" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "የተዘጋው ንዑስ መክፈቻ" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "ለዚህ ፋይል ምንም ተግባር አልተገኘም" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "ዝርዝር" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "ስለ" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "ከሰዓት:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%b %e" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %b %e" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "የተዘጋጀው በ :" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "የተጻፈው በ :" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "የቅጂ መብት © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "ሰነዱ የተሰናደው በ :" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "የተተረጎመው በ %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "መዝጊያ" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "ይህ ፕሮግራም የታተመው በ እነዚህ ውሎች ስር ነው " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " ፍቃዶች ምንም አይነት ዋስትና አይሰጥም በበለጠ ለመረዳት ይህን ይጎብኙ " granite-0.3.0/po/pt.po000644 001750 001750 00000014121 12340443640 016247 0ustar00shnatselshnatsel000000 000000 # Portuguese translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-29 21:50+0000\n" "Last-Translator: Pedro Monteiro \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-30 05:48+0000\n" "X-Generator: Launchpad (build 16967)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Programadores" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Página Web" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Traduzir esta aplicação" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Reportar um problema" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Fechar separador" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Abrir numa nova janela" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplicar" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Fechar o outro separador" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Fechar os outros separadores" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Limpar tudo" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Novo separador" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Anular Fechar Separador" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Separadores Fechados" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Não foi possível ligar ao Contractor. Pode ser necessário instalar a " "aplicação." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Não foi encontrada uma ação para este ficheiro." #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Sobre" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "PM:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a, %e %b %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%e %b" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a, %e %b" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Projetado por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Desenvolvido por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Direitos de autor © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documentado por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Traduzido por %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Fechar" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Este programa é licenciado nos termos da licença " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " e não possui qualquer garantia. Para mais detalhes, consulte " granite-0.3.0/po/vi.po000644 001750 001750 00000014020 12340443640 016240 0ustar00shnatselshnatsel000000 000000 # Vietnamese translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-01-27 06:19+0000\n" "Last-Translator: Trung Ngô \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Trang web" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Dịch ứng dụng này" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Thông báo lỗi" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Đóng tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Mở trong cửa sổ mới" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Nhân đôi" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Đóng các tab khác" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Đóng các tab khác" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Tab mới" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Không thể kết nối với Contractor. Có lẽ bạn cần cài đặt nó trước" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Không tìm thấy hành động nào cho tập tin này" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Giới thiệu" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Thiết kế bởi:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Được viết bởi:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Viết tài liệu bởi:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Được dịch bởi: %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Chương trình này được phát hành theo các điều khoản của giấy phép " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " , nó HOÀN TOÀN KHÔNG ĐƯỢC BẢO HÀNH; để biết chi tiết, truy cập " granite-0.3.0/po/fr_CA.po000644 001750 001750 00000013730 12340443640 016603 0ustar00shnatselshnatsel000000 000000 # French (Canada) translation for granite # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-01-07 06:06+0000\n" "Last-Translator: Nicolas Boivin \n" "Language-Team: French (Canada) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Site web" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Traduire cette application" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Signaler un problème" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Fermer l’onglet" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Ouvrir dans une nouvelle fenêtre" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Dupliquer" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Fermer l'autre onglet" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Fermer les autres onglets" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nouvel onglet" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Impossible d'accéder à Contractor. Vous avez peut-être besoin de l'installer." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Aucune action n'a été trouvée pour ce fichier" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "À propos" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Conçu par :" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Développé par :" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documenté par :" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Traduit par %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Ce programme est publié conformément à la licence " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " , il est distribué SANS AUCUNE GARANTIE; pour plus de détails, visitez " granite-0.3.0/po/te.po000644 001750 001750 00000012734 12340443640 016244 0ustar00shnatselshnatsel000000 000000 # Telugu translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2012-05-14 16:37+0000\n" "Last-Translator: Praveen Illa \n" "Language-Team: Telugu \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "మెను" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "గురించి" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/da.po000644 001750 001750 00000013563 12340443640 016221 0ustar00shnatselshnatsel000000 000000 # Danish translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-04-08 16:27+0000\n" "Last-Translator: Frans Peter Larsen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Hjemmeside" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Oversæt Dette Program" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Indrapportér et problem" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Luk Fane" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Åben it et nyt Vindue" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplikér" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Luk Anden Fane" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Luk Andre Faner" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Ny Fane" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Kunne ikke kontakte Kontaktoren. Du er måske nød til, at installere det" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Ingen handling fundet for denne fil" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Om" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Designet af:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Skrevet af:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Ophavsret © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumenteret af:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Oversat af %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Dette program er publiceret under betingelserne til " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " licens, der er ABSOLUT INGEN GARANTI; for detaljer kan man se " granite-0.3.0/po/en_AU.po000644 001750 001750 00000013633 12340443640 016622 0ustar00shnatselshnatsel000000 000000 # English (Australia) translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-01-16 07:13+0000\n" "Last-Translator: David Robert Piper \n" "Language-Team: English (Australia) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Developers" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Website" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Translate This App" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Report a Problem" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Close Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Open in a new Window" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplicate" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Close Other Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Close Other Tabs" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Clear All" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "New Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Undo Close Tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Closed Tabs" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Could not contact Contractor. You may need to install it" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "No action found for this file" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "About" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Designed by:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Written by:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documented by:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Translated by %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Close" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "This program is published under the terms of the " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " granite-0.3.0/po/gl.po000644 001750 001750 00000014132 12340443640 016230 0ustar00shnatselshnatsel000000 000000 # Galician translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-05 08:30+0000\n" "Last-Translator: Miguel Anxo Bouzada \n" "Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-06 06:03+0000\n" "X-Generator: Launchpad (build 16948)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Desenvolvedores" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Páxina web:" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Traducir este aplicativo" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Informar dun problema" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Pechar a lapela" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Abrir nunha nova xanela" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplicar" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Pechar a outra lapela" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Pechar as outras lapelas" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Limpar todo" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nova lapela" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Desfacer o peche da lapela" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Lapelas pechadas" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Non foi posíbel contactar con Contractor. É probábel que precise instalalo" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "No se atopou ningunha acción para este ficheiro" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menú" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Sobre" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "PM:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l.%M.%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%H.%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H.%M.%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H.%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %e de %b de %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%e de %b de %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%e de %b" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %e de %b" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Deseñado por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Escrito por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documentado por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Traducido por %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Pechar" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Este programa foi publicado baixo os termos da licenza " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " , que non ofrece NINGUNHA GARANTÍA; para obter máis detalles, visite " granite-0.3.0/po/hr.po000644 001750 001750 00000013072 12340443640 016241 0ustar00shnatselshnatsel000000 000000 # Croatian translation for granite # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-04-15 14:41+0000\n" "Last-Translator: zvacet \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Otvori u novom prozoru" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Zatvori drugu karticu" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "NIje nađena radnja za ovu datoteku" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Oblikaovao:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Napisao:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Autoraska prava © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumentirao:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Preveo %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/sq.po000644 001750 001750 00000013715 12340443640 016257 0ustar00shnatselshnatsel000000 000000 # Albanian translation for granite # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-02-01 14:05+0000\n" "Last-Translator: Gim H \n" "Language-Team: Albanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Zhvilluesit" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Faqe interneti" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Përkthe këtë app" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Raporto një Problem" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Mbyll Tabin" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Hape në një dritare të re" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Dyfisho" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Mbyll tab tjera" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Mbyll tabet tjera" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Pastro Gjithçka" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Tab i Ri" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Rikthe Tabin e Mbyllur" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Tabet e Mbyllura" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Nuk mund të kontaktoni kontraktorin. Ju mund të keni nevojë për ta instaluar " "atë" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Nuk eshte gjetur asnjë veprim per këtë skedë" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Rreth" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Dizenjuar nga" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Shkruar nga:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumentuar nga:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Perkthyer nga %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Mbyll" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Ky program është publikuar sipas kushteve të " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " granite-0.3.0/po/rue.po000644 001750 001750 00000013712 12340443640 016424 0ustar00shnatselshnatsel000000 000000 # Rusyn translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2012-10-21 17:13+0000\n" "Last-Translator: u.f.djeison@gmail.com \n" "Language-Team: Rusyn \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Перекласти сю апплікацію" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Розказати про проблему" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Закрити вкладку" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Открити в новому оболоци" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Копіровати" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Нова вкладка" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Неуходить контактовати Додаватиля. Може будете мусіти іншталовати се" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Меню" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Про..." #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Ся програма опублікованна на праві " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " ліцензія, йде БЕЗ ЗАРУКИ; про подробності побовайте на " granite-0.3.0/po/nl.po000644 001750 001750 00000013775 12340443640 016253 0ustar00shnatselshnatsel000000 000000 # Dutch translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-04-13 16:55+0000\n" "Last-Translator: Thomas Berends \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-04-14 05:49+0000\n" "X-Generator: Launchpad (build 16976)\n" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Kon Contractor niet benaderen. Mogelijk moet u dit installeren." #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Ontwikkelaars" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Website" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Vertaal dit programma" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Meld een probleem" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Tabblad sluiten" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Open in een nieuw venster" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Kopiëren" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Sluit andere tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Andere tabs sluiten" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Wis allen" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nieuwe tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Open laatst gesloten tab" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Gesloten tabs" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Geen actie gevonden voor dit bestand" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Over" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "PM:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%k:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %e %b %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%e %b" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %e %b" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Ontworpen door:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Geschreven door:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Gedocumenteerd door:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Vertaald door %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Sluiten" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Dit programma wordt verspreid onder de voorwaarden van de " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " licentie, het komt met ABSOLUUT GEEN GARANTIE; voor details, bezoek " granite-0.3.0/po/ru.po000644 001750 001750 00000015032 12340443640 016254 0ustar00shnatselshnatsel000000 000000 # Russian translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-21 17:43+0000\n" "Last-Translator: Pasha. P. Komar \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-22 06:53+0000\n" "X-Generator: Launchpad (build 16967)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Разработчики" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Веб-сайт" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Перевести это приложение" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Сообщить о проблеме" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Закрыть вкладку" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Открыть в новом окне" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Создать копию" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Закрыть другую вкладку" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Закрыть другие вкладки" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Очистить всё" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Новая вкладка" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Восстановить закрытую вкладку" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Закрытые вкладки" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Не удалось соединиться с Contractor. Возможно, его нужно установить." #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Для этого файла нет сохранённых действий" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Меню" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "О программе" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "PM:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%b %e %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%b %e" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %b %e" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Разработано:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Написано:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Документация:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Переводено %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Закрыть" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Эта программа опубликована в соответствии с условиями " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " лицензии и предоставляется без каких-либо гарантий. Для получения подробной " "информации посетите " granite-0.3.0/po/sk.po000644 001750 001750 00000013265 12340443640 016251 0ustar00shnatselshnatsel000000 000000 # Slovak translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-03 17:53+0000\n" "Last-Translator: majo dom \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-04 08:14+0000\n" "X-Generator: Launchpad (build 16948)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Vývojári" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Webstránka" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Preložiť aplikáciu" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Nahlásiť problém" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Zatvoriť kartu" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Otvoriť nové okno" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplikovať" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Zatvoriť inú kartu" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Zatvoriť ostatné karty" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Vymazať všetky" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nová karta" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Vrátiť zatvorenú kartu" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Zatvorené karty" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Žiadna akcia pre tento súbor" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "O" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%I:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/ca.po000644 001750 001750 00000014135 12340443640 016214 0ustar00shnatselshnatsel000000 000000 # Catalan translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-05-15 20:49+0000\n" "Last-Translator: Alfredo Hernández \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-05-16 06:32+0000\n" "X-Generator: Launchpad (build 17007)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Desenvolupadors" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Lloc web" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Tradueix aquesta applicació" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Informeu d'un problema" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Tanca la pestanya" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Obre a una finestra nova" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplica" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Tanca l'altra pestanya" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Tanca les altres pestanyes" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Neteja-ho tot" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Pestanya nova" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Desfés el tancament de la pestanya" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Pestanyes tancades" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "No s'ha pogut contactar amb el Contractor. Pot ser que necessiteu instalar-lo" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "No s'ha trobat cap acció per a aquest fitxer" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menú" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Quant a" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "PM:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %e de %b de %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%e de %b de %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%e de %b" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %e de %b" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Disenyat per:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Escrit per:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documentat per:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Traduït per %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Tanca" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Aquest programa està publicat sota els termes de la llicència " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " , aquesta no té CAP MENA DE GARANTIA; per a més detalls, visiteu " granite-0.3.0/po/sl.po000644 001750 001750 00000013561 12340443640 016251 0ustar00shnatselshnatsel000000 000000 # Slovenian translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-05-07 20:48+0000\n" "Last-Translator: Damir Jerovšek \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Spletna stran" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Prevedite ta program" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Poročajte o težavi" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Zapri zavihek" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Odpri v novem oknu" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Podvoji" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Zapri drug zavihek" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Zapri druge zavihke" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nov zavihek" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Ni mogoče kontaktirati Contractor-ja. Morda ga moraš namestiti" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Ni bilo najdenega dejanja za to datoteko" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Meni" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "O programu" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%k.%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Oblikoval:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Napisal:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Avtorsko zaščiteno © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumentiral:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Prevedel %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Ta program je objavljen pod pogoji dovoljenja " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " in prihaja BREZ KAKRŠNEGAKOLI JAMSTVA; za več podrobnosti obiščite " granite-0.3.0/po/fa.po000644 001750 001750 00000014033 12340443640 016214 0ustar00shnatselshnatsel000000 000000 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2012-12-28 09:12+0000\n" "Last-Translator: Mohammad Zali \n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" "Language: \n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "وبگاه" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "ترجمه برنامه" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "گزارش ایراد" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "بستن برگه" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "باز کردن در پنجره جدید" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "تکرار" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "برگه جدید" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "نمی‌توان با کانترکتور اتصال برقرار کرد. احتمالاً باید آن را نصب کنید" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "هیچ کنشی برای این پرونده پیدا نشد" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "منو" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "درباره" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "طراح:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "نویسنده:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "حق نشر © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "مستندسازی:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "ترجمه توسط %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "این برنامه طبق مجوز نرم‌افزاری " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " منتشر شده است، هیچ گونه تضمینی برای این برنامه ارائه نشده است؛ اطلاعات " "بیشتر در " granite-0.3.0/po/es.po000644 001750 001750 00000014136 12340443640 016241 0ustar00shnatselshnatsel000000 000000 # Spanish translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-05-15 20:49+0000\n" "Last-Translator: Alfredo Hernández \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-05-16 06:32+0000\n" "X-Generator: Launchpad (build 17007)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Desarrolladores" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Sitio web" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Traducir esta aplicación" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Informar de un problema" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Cerrar pestaña" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Abrir en una ventana nueva" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Duplicar" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Cerrar la otra pestaña" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Cerrar las demás pestañas" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Limpiar todo" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Pestaña nueva" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Deshacer el cierre de pestaña" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Pestañas cerradas" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "No se ha podido contactar con Contractor. Puede que necesite instalarlo" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "No se ha encontrado ninguna acción para este archivo" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menú" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Acerca de" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "PM:" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "%l:%M:%S %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %e de %b de %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%e de %b de %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%e de %b" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %e de %b" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Diseñado por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Escrito por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Documentado por:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Traducido por %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Cerrar" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Este programa está publicado bajo los términos de la licencia " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " , esta no tiene NINGUNA GARANTÍA; para más detalles, visite " granite-0.3.0/po/el.po000644 001750 001750 00000015007 12340443640 016230 0ustar00shnatselshnatsel000000 000000 # Greek translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-08-26 14:34+0000\n" "Last-Translator: Stefanos Papanatsios \n" "Language-Team: Greek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Προγραμματιστές" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Ιστότοπος" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Μεταφράστε την εφαρμογή" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Αναφορά προβλήματος" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Κλείσιμο καρτέλας" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Άνοιγμα σε νέο παράθυρο" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Διπλότυπο" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Κλείσιμο άλλης καρτέλας" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Κλείσιμο των άλλων καρτελών" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Νέα καρτέλα" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Αναίρεση κλεισίματος καρτέλας" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Κλειστές καρτέλες" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Δεν ήταν δυνατή η επικοινωνία με την υπηρεσία Contractor. Ίσως χρειαστεί να " "την εγκαταστήσετε" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Δεν βρέθηκε ενέργεια γι αυτό το αρχείο" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Μενού" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Σχετικά" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Σχεδιασμένο από:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Γραμμένο από" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Πνευματική ιδιοκτησία © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Τεκμηριωμένο από:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Μετάφρασμένο από %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Αυτό το πρόγραμμα δημοσιεύεται υπό τους όρους της " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " αδείας και έρχεται ΧΩΡΙΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ. Για λεπτομέρειες, επισκεφθείτε " granite-0.3.0/po/sr.po000644 001750 001750 00000014356 12340443640 016262 0ustar00shnatselshnatsel000000 000000 # Serbian translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-06-27 20:59+0000\n" "Last-Translator: Иван Благојевић \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:10+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Веб место" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Преведите ову апликацију" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Пријави проблем" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Затвори језичак" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Отвори у новом прозору" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Удвостручи" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Затвори други језичак" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Затвори друге језичке" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Нови језичак" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Није могуће контактирати извођача радова. Можда га морате инсталирати" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Није нађена акција за ову датотеку" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Изборник" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "О овоме" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Дизајнирао:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Написао:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Ауторско право © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Документовао:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Превео %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Овај програм је објављен под условима " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " лиценце, долази БЕЗ ИКАКВЕ ГАРАНЦИЈЕ; за детаље, посетите " granite-0.3.0/po/fi.po000644 001750 001750 00000014056 12340443640 016231 0ustar00shnatselshnatsel000000 000000 # Finnish translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2014-03-05 21:30+0000\n" "Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-03-06 06:03+0000\n" "X-Generator: Launchpad (build 16948)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "Kehittäjät" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Verkkosivusto" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Käännä tämä sovellus" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Ilmoita ongelmasta" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Sulje välilehti" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Avaa uudessa ikkunassa" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Kahdenna" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "Sulje toinen välilehti" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "Sulje muut välilehdet" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "Tyhjennä kaikki" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Uusi välilehti" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "Kumoa sulje välilehti" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "Suljetut välilehdet" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "Ei yhteyttä Contractoriin. Onhan se asennettu?" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Tälle tiedostolle ei löytynyt sopivaa toimintoa" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Valikko" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Tietoja" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr ":" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "%H:%M:%S" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "%a %e. %Bta %Y" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "%e. %Bta %Y" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "%Y" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "%e. %Bta" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "%a %Y" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "%a" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "%a %b %e." #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "%b" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Suunnitellut:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Toteuttanut:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Tekijänoikeus © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumentoinut:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Käännöksen toteutti %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "Sulje" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Tämä sovellus on julkaistu lisenssin " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" " ehtojen alaisena. Ohjelma ei sisällä MINKÄÄNLAISTA TAKUUTA. Lue lisätietoja " "osoitteessa " granite-0.3.0/po/af.po000644 001750 001750 00000012700 12340443640 016213 0ustar00shnatselshnatsel000000 000000 # Afrikaans translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2012-03-24 18:23+0000\n" "Last-Translator: Geoffrey De Belie \n" "Language-Team: Afrikaans \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Menu" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "Aangaande" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/ar.po000644 001750 001750 00000014405 12340443640 016233 0ustar00shnatselshnatsel000000 000000 # Arabic translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2013-10-20 17:42+0000\n" "Last-Translator: Fathallah Wael \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "المطوّرون" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "موقع الإنترنت" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "قم بترجمة هذا التطبيق" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "قم بالإبلاغ عن مشكلة" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "إغلاق تبويب" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "افتح في نافذة جديدة" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "كرّر" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "إغلاق علامة التبويب الأخرى" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "إغلاق علامات التبويب الأخرى" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "علامة تبويب جديدة" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "التراجع عن إغلاق تبويب" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "التبويبات المغلقة" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "غير قادر على التواصل مع Contractor. قد تحتاج لتثبيته" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "لم يُعثر على فعل لهذا المللف" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "القائمة" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "عن البرنامج" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%l:%M %p" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "تصميم:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "كتبها:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "جميع الحقوق محفوظة © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "وثقتها:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "ترجم من قبل %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "نُشِرَ هذا البرنامج وفق شروط رخصة " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " ، ويأتي دون ضمانات على الإطلاق؛ لمزيد من التفاصيل، قم بزيارة " granite-0.3.0/po/lt.po000644 001750 001750 00000012663 12340443640 016254 0ustar00shnatselshnatsel000000 000000 # Lithuanian translation for granite # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2012-11-05 08:42+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr "" granite-0.3.0/po/cs.po000644 001750 001750 00000013545 12340443640 016242 0ustar00shnatselshnatsel000000 000000 # Czech translation for granite # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the granite package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: granite\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-12-23 19:24+0100\n" "PO-Revision-Date: 2012-12-22 21:36+0000\n" "Last-Translator: Marek Suchánek \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-02-25 06:09+0000\n" "X-Generator: Launchpad (build 16926)\n" #: /home/noelco/granite/po/../lib//Application.vala:164 msgid "Developers" msgstr "" #: /home/noelco/granite/po/../lib//Application.vala:174 msgid "Website" msgstr "Webová stránka" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:124 msgid "Translate This App" msgstr "Přeložit tuto aplikaci" #: /home/noelco/granite/po/../lib//Widgets/AboutDialog.vala:129 msgid "Report a Problem" msgstr "Nahlásit problém" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:170 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:195 msgid "Close Tab" msgstr "Zavřít kartu" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:198 msgid "Open in a new Window" msgstr "Otevřít v novém okně" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:199 msgid "Duplicate" msgstr "Zdvojit" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:248 msgid "Close Other Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:350 msgid "Clear All" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:600 #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:634 msgid "New Tab" msgstr "Nová karta" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:601 msgid "Undo Close Tab" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/DynamicNotebook.vala:644 msgid "Closed Tabs" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "Could not contact Contractor. You may need to install it" msgstr "" "Nelze se spojit s programem Contractor. Možná jej musíte doinstalovat" #: /home/noelco/granite/po/../lib//Widgets/ContractorView.vala:103 msgid "No action found for this file" msgstr "Pro tento soubor nebyla nalezena žádná akce" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:48 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:59 #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:72 msgid "Menu" msgstr "Nabídka" #: /home/noelco/granite/po/../lib//Widgets/AppMenu.vala:82 msgid "About" msgstr "O aplikaci" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:117 msgid "PM:" msgstr "" #: /home/noelco/granite/po/../lib//Widgets/TimePicker.vala:135 msgid ":" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:77 msgid "%l:%M:%S %p" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (12h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:80 msgid "%l:%M %p" msgstr "%H:%M" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) with seconds #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:85 msgid "%H:%M:%S" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the hour (24h format) #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:88 msgid "%H:%M" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday, date, and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:102 msgid "%a %b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date and year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:105 msgid "%b %e %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the year #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:108 msgid "%Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:111 msgid "%b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and year. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:114 msgid "%a %Y" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:117 #, c-format msgid "%a" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the weekday and date #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:120 msgid "%a %b %e" msgstr "" #. / TRANSLATORS: a GLib.DateTime format showing the month. #: /home/noelco/granite/po/../lib//Widgets/Utils.vala:123 msgid "%b" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:36 msgid "Designed by:" msgstr "Navrhli:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:55 msgid "Written by:" msgstr "Napsali:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:93 #, c-format msgid "Copyright © %s" msgstr "Copyright © %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:111 msgid "Documented by:" msgstr "Dokumentovali:" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:171 #, c-format msgid "Translated by %s" msgstr "Přeložili %s" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:355 msgid "Close" msgstr "" #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid "This program is published under the terms of the " msgstr "Na tento program se uplatňují podmínky licence " #: /home/noelco/granite/po/../lib//GtkPatch/AboutDialog.vala:456 msgid " license, it comes with ABSOLUTELY NO WARRANTY; for details, visit " msgstr " a je poskytován ABSOLUTNĚ BEZ ZÁRUKY; pro podrobnosti navštivte "