itPISoOwCZe
zXrm7*xL}cLqmL2o5CupjogJ3~L@da~&5p}PA6(pmie6}#fyzD_VrX)sp$!TO3Zs^g
z6uzUuH5yzbg#by4M^o2maFG-OBq<(ET~rG$E<~R$H7~_hsa(n4?&t5dQy3T+*pj^6
zT^Rm@;DWu&Co?cGa29w(7BevDDT6R$#Zvn+1_lQ95>H=O_NN?DY-|?)WA-zG2Ea;O
zBTAg}b3t7L25^ftHASI3vm`?S)M5>9+M~`tdKy7wuk0yP8+;b
zRWgHabZj%^=Fn3}<>C&1;PobF4U4q&LD3~%Q+G5(tc>tEpcc#Hc<@nL$^^w_fzMBU
zp7MR(%tzUF?;aNXTUwXD^w!$4Rn=FkO05|l_*<{{TRr*J3ab@*&vj#VJ@XG+{Woj<
ztqGb8e~Kr+%Kf@)*ACBx`QiSn+BY#bv=+zgU31S@Ugvz|mlah}cc+Up=qx$=%CR)8
zc1HM%+u^DERJ9o*GP1AUeU)sw)AV!F*2LMdGno%qIbre3
z+aHCkGPgX-$B_J`_;hXfOy&a_xjx*r?qUoEahIL;t8+0()Gu7$&BSml{>8gA_J;op
zE}VB|WO%IqB{-1bzz^=fE+PyD|D5cFSQ&cuU*MNYTf@Zg*m&l>r~mdQT6F(>&R}4-
zKCON8p8OeWcWH_VMusbyJ}we{OR?ThAYoWu`SasWr%oV
zR39iCrh7i}!@^$?cTaw^X3$ymc(wlL!!MhcW{a&4`+YUeZ8g&Yr5PdltFK=@`lfrS
z^q-2QiE+RD4u@>}dgm`6L;c~(!@29!dCQNl=}Z0MYIlq!0>)H1_p+Tk|4iehGy~f|J`>x
zr60&YnXL3;*7qqY&%bq~-pDx_D54(pTJ*|0nY_mQ6K{1Z9xF@}EVw_H@n75rqw{qX~&t3JE0Hat#0J$R4j`km$f
z6Y@8D<~@Utrk~BXvu$X2qP&TLK}gxt#WAE}&fB|xSKlj@J^t~1dG3y9%d$^;%#Dyx
z4nE#;z)OJj;<362ueB0}-<&&yp5}k`cVWHA@1%68S8!^8pwrBYy(&{(XK-?F6cOBA
zx;b^`ZmZ=x=k9*}toZZ3`u%bH=RPjAyB
zPC-1I+kW52*{uCqOdBd|wth}B_?Uak=HKoIiKz^193Qs%&i3EmD8RsCaXaXLqX+}b
zj$1|bNeluHGNS$UzbN&$BWxoyp6sH)9Y;D0%(sGh+k88uQli?m6gkOo5
zVqoc5yJo)y1BXCVVtplpfWoFr|F{?w91@QHHDz#M_ox_|-`PwJ
z44Y>sIbJW8hGTj;=3d5OCOX?B6d2g@%;1e|Z@i
z7@ADKZ)ad&+I9WjeHI3e7cuVj(hLd+CT>GjqO
z3JWs#{^ezCXlN__zMX}EY1Q@n_eB^uR>(NkM>8la$P)S6%h=G+HSx=KHU_3H_sjQX
z7&tU!0_&?86c%KJ{N-h8XlR=Fbvp+GlUU!n{hka08xmUn<}x)j>|FdNUxb0>jAUm0
zY6gXbXBod|vobImyWP33$G|be>eatCMu!7aCVt<}!@y+Lvu}SUgTRJ7p1--w4GpG`
zU*yX$u&j~tu7Ay-@Ze6xui5MjjO+VX?yqGK`0)Ro5dE85uYtZuNZ>xqOn3!GR&U
zUYy|)cfy%dqg@KL!;+g{$`!
z8$_6n{HkV|;Ls3LKb_$ax4@hC!VU$Dlm5kNlD175tBb}(R+`a74IL)BsF{&I#!mKR^j`4xH?mj3(4
z$RfDlsy#!40MnIU?hFDB4RQYk818Tfypd;aC}y1Xx0#_p*I{eD2tyz1i*NkQ2i7t?
z{dbFD+vUF#-^r-m*^N(^4KY#7d(8=6c
zcdESM?&Er6?ivti%BC6y`GY{aeSVB7ES|ee;G8rix$I>=Qf~g6rQiT;h1}
z>b;zU5M$2Yzsw$r4eR%NGwi<7!>;{~jMBf^84Y4~E&aWp`Ni+q!W&*6?VZofl(6Gj%5sLjf5%vSUdyvN
ztY?__ZyAfvTX}Ye`3&p+wXyiTm*;TkXV~{IjpfV>c}|Dj4Cns2v7C7&&*iY1;od(r
zmNReUxgBORoci~B-kfidrHq?@vol{%YS_PjSA*r>#f&S&6)wg{9@z8mA;T4}2`|@c
zCFK3DV0gvi@ikuP1J~X1S*uyjyq6bn=w;aX?{L9YPf&&Df
zs&IRL*nxlQU2@wt)cY``GA;Q%nQKQ`kWxb7{{;+QEGNE;iw9h=*J?P*Wb%ufTjQm?
z*a0O*tG}+SB47Kt6ZSEz{nx~F>K8kkfqz3>y(Z)DdD^e#B@g5<&ib3m@!QtnRU)o#@4UY=HT^D9xSo-+wdNl?H
zuH$#(y%`v$^zPq3iGe|5mP@@XBSV1E%zs);3=0y1{+hBd9C&o{Yq$Ud1GoCk_&5dz
zomn~cg^Uav5-$B+%F1xy&&luNVhjw$%P+=;dp&2RT>pKt%3&2T`+VgLV2rZ$H)7cAb-%dmz?=gV`^3zzS6
zFt{}{rv)Sx0Kt|&UvA6s+!^G>-)E44=ibTy1jeCzqx@obVJomlYx@YHZmlR!f-+t*YSKj$0?gxG!dp|k$r0#v~
ziU7fe=Eu%+uWvFsRDIxSe(rwuHFbaW&!4bu`0%wp;ZNDg!(9wVgg5NlFUZ*Pm*21J
zmpD_0T0(NYFq6jb{ZU2#<+~V<2pO#1&&VkCx0}&L$YAgOT?|wIJ!N>rG2?1{WP{&-
zE`~ssm><(3|Aw+^d|l5d;C!HU^8T|wS5INu_GiJPi&1}9Gq?yC?6+UpFk9^@)0JP>
z89(SJ1lFrER{hmxtPtO@4WZqCI1cXe4Bf3wdHmr##w(?
zGggQNT#Jus$ogN!P{%suo4DA5+xr@=aW*;J5zP-{wpo)E4a9-_dZp-uK((km%prnLem4Sh~M~f&1@l#tNYe
z*XGAIbpCtG@P{Mg?RlL8ZvXih;#jtPPZv#CQqRw@nMv>W&sF_Zzl^yQ-qgQ{m;Jk&
zAwu-SJzs66U%xhUE_h>KxA^(#-3&LxFWjCFN>p=cu1~0(@>i45q2Y|j@5xLJ44oIhEoWt5
z{G_lF{>1Oe%nc0Z-tL*W%iflO9%G$h;ntz>Xu_&ej5F=GS6tHQ6(nHU(iB)>k-rqJBbU*r2~W|`a%
zq3aiO7}^f+ublNxXExK4cZ}}Ge&0OzjM+e@T7)TMUh77Cbp{TFD!z07)-WhEB;DpO
z{Pvucf${I{y4$sDo_}U)Xt-DS{W%*0V{P*L^Lz|URmbknmuFzv;=f=&0|Q6KT$g%I
z27wD^6aOhOC@e@d`kTt&;PAK4&*c|4;|YZaua;~0TU*`puDtVxld+*;SLau8W`mlN
zCA*i_{y3fDe)r=6&rO?Ou$=fhojKvNT*1?idmq0kpS)gnD#O8lO$<6*5p~Nms+m-N
zdoyiNe{jaSHCkBVR=h}qDP#J5&3n@rZvNZEki%(l`~EbBhyM;S=x|27%=c_4sn296
zV_EYq-~B-2-9vwmGDZk)*tTDkkzH?R`x`ATb-n{_4YmI3{`asla{U!$h!EJYaX%}g
z)L&DE7u++h#m6^z)r&IRVp{h7y4Zrt@$3f*a$bv{Jhw{BVDSp3Aija6L?PgtjXk#Ae=cZw_E?RqYUD2K@UOvYV*OBqjaX}s0fcG$V!
zh{2Qb>0edWjPKXk6x0_i+dqfl>%UhFOIWUaoi4QCe!P4`Ps6Q$Moc_k%o!Y<9BS*M
z7=JI{$9Qe7@ZW!83?H~NUixc2xOGy5vAl2oa;yExVhjb`8L!Xl9&oFdW~gA@^6j~3
z!jk=h40D)n{VwL(aOpl5gB_#o-=8cqUgongOmEotFNW#Om+j0A?hg6&a*S=iq?ryV
zF4%A1&fxu5mvMo(!^Qb=4J-dGV+i10@X}v5;r`cYziu-*Xg}aw^l!`m@E^ka{|erW
z6xqz$5W?_qn@`-ueJtxFnHd-_ZDvc@@tVIsBmU5qR?!5$0|lQuk8jmayk%GB@5A_w
zVaDI>2P(XN3t6NIG=wrf_f_KBz`?-8k}kx+a^kES1BbxuKn4K?)71=TxNf+7|Hq`3
zCe{$jcw22F%MDfrMkQk&1}2p>Nd^{gF-|3H%14B*D?$S+7DvyU)smgRLPJKdLZ>Wo4^Am29^(J*%>$zW(zY295B^q
zP-w`^W0)aY@S^zE^b4l;3~jsRmi<9@yd=YBreo(b;+-DvVcekg;9X}h<2wcihPQth8yGHGvKYwRE}H*M)#vs$;alMs
zjQSaJ?lHfUvtL`wsawo>U=hRezjK*3s2|9#U(c|Hv*7l9U503;Ki|G{ADF~&{I4wY
z2IT|A_2(JZa9C`*U08peA&0}l=-&ETPTOMM15FIi|ITH;ApT(Q{&I#}On1JQ^E-q$
z{QvilF@uZaf;|I+Eu-KscLoEQ-_M(+{G}Jwb1)o!*xA$|@i&>_f`Gu1dI5${OpCts
zGdV;#%=nkcaDuDjvOOPzCu8F;b|wXNg`oc)3`%K>$Tr2icZJ6KxY$O|#_H_Z5(%=AD&U`u@f
z!xyGS-}<>4q8x7gOJuyj)p6TikHL%aHh=3|c?pKO4R5#4{Ijvdgqx?q%i+bpg^WDy
z{LA=$jHNfJdg3WitA5
zo?$_#L)Sk|hAo^YF50s`|UeD)0V8h7y
zTb;!q+TqwgNyalm6E@X*F&sWvURU;5z4+UC&V(ONQkol<{GH5nLqj3^{~CsC+!j`z
zx9oKrwlekgeSa0(`R)=^gswv2|04`xEGh5iOCE@1T={!BTY;OyyMH?wb+|q5*;_Uw
q{ %s" % app_main_description
- )
-
- lbl_secondary_message = Gtk.Label(xalign=0, yalign=0)
- lbl_secondary_message.set_text(
- " %s" % app_secondary_message
- )
-
- lbl_secondary_description = Gtk.Label(xalign=0, yalign=0)
- lbl_secondary_description.set_text(
- " %s" % app_secondary_description
- )
-
- lbl_version = Gtk.Label(xalign=0, yalign=0)
- lbl_version.set_markup(
- " Version: %s" % app_version
- )
-
- ivbox_about = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
- ivbox_about.pack_start(app_image, True, True, 0)
- ivbox_about.pack_start(lbl_main_description, True, True, 0)
- ivbox_about.pack_start(lbl_version, True, True, 0)
- ivbox_about.pack_start(lbl_secondary_message, True, True, 0)
- ivbox_about.pack_start(lbl_secondary_description, True, True, 0)
-
- stack.add_titled(ivbox_about, "About BlackBox", "About")
-
- grid_support = Gtk.Grid()
-
- lbl_padding1 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding1.set_text(" ")
-
- grid_support.attach(lbl_padding1, 0, 1, 1, 1)
-
- lbl_support_title = Gtk.Label(xalign=0, yalign=0)
- lbl_support_title.set_markup("Discord ")
-
- lbl_support_value = Gtk.Label(xalign=0, yalign=0)
- lbl_support_value.set_markup("%s" % (app_discord, app_discord))
-
- lbl_website_title = Gtk.Label(xalign=0, yalign=0)
- lbl_website_title.set_markup("ArcoLinux website ")
-
- lbl_website_value = Gtk.Label(xalign=0, yalign=0)
- lbl_website_value.set_markup("%s" % (app_website, app_website))
-
- lbl_github_title = Gtk.Label(xalign=0, yalign=0)
- lbl_github_title.set_markup("GitHub ")
-
- lbl_github_value = Gtk.Label(xalign=0, yalign=0)
- lbl_github_value.set_markup("%s" % (app_github, app_github))
-
- grid_support.attach(lbl_support_title, 0, 2, 1, 1)
-
- grid_support.attach_next_to(
- lbl_support_value, lbl_support_title, Gtk.PositionType.RIGHT, 20, 1
- )
-
- grid_support.attach(lbl_website_title, 0, 3, 1, 1)
- grid_support.attach_next_to(
- lbl_website_value, lbl_website_title, Gtk.PositionType.RIGHT, 20, 1
- )
-
- grid_support.attach(lbl_github_title, 0, 4, 1, 1)
- grid_support.attach_next_to(
- lbl_github_value, lbl_github_title, Gtk.PositionType.RIGHT, 20, 1
- )
-
- stack.add_titled(grid_support, "Support", "Support")
-
- box_outer = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
- box_outer.set_border_width(10)
-
- lbl_padding2 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding2.set_text(" ")
-
- lbl_padding3 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding3.set_text(" ")
-
- lbl_authors_title = Gtk.Label(xalign=0, yalign=0)
- lbl_authors_title.set_text(
- "The following people have contributed to the development of %s" % app_name
- )
-
- listbox = Gtk.ListBox()
- listbox.set_selection_mode(Gtk.SelectionMode.NONE)
-
- box_outer.pack_start(lbl_authors_title, True, True, 0)
- box_outer.pack_start(listbox, True, True, 0)
-
- treestore_authors = Gtk.TreeStore(str, str)
- for item in app_authors:
- treestore_authors.append(None, list(item))
-
- treeview_authors = Gtk.TreeView(model=treestore_authors)
-
- renderer = Gtk.CellRendererText()
- column = Gtk.TreeViewColumn(None, renderer, text=0)
-
- treeview_authors.append_column(column)
-
- path = Gtk.TreePath.new_from_indices([0])
-
- selection = treeview_authors.get_selection()
-
- selection.select_path(path)
-
- treeview_authors.expand_all()
- treeview_authors.columns_autosize()
-
- row_authors = Gtk.ListBoxRow()
- vbox_authors = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
- row_authors.add(vbox_authors)
-
- vbox_authors.pack_start(treeview_authors, True, True, 0)
-
- listbox.add(row_authors)
-
- stack.add_titled(box_outer, "Authors", "Authors")
-
- self.connect("response", self.on_response)
-
- self.vbox.add(stack_switcher)
- self.vbox.add(stack)
-
- self.show_all()
-
- def on_response(self, dialog, response):
- self.hide()
- self.destroy()
diff --git a/usr/share/blackbox/ui/AppFrameGUI.py b/usr/share/blackbox/ui/AppFrameGUI.py
deleted file mode 100644
index 0a00c4a..0000000
--- a/usr/share/blackbox/ui/AppFrameGUI.py
+++ /dev/null
@@ -1,276 +0,0 @@
-#!/bin/python
-
-from socket import TIPC_ADDR_NAME
-from urllib.parse import scheme_chars
-import Functions as fn
-
-class AppFrameGUI:
- def build_ui_frame(self, Gtk, vbox_stack, category, packages_list):
- try:
- # Lets set some variables that we know we will need later
- # hboxes and items to make the page look sensible
- cat_name = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
- seperator = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
- lbl1 = Gtk.Label(xalign=0)
- lbl1.set_text(category)
- lbl1.set_name("title")
- hseparator = Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL)
- seperator.pack_start(hseparator, True, True, 0)
- cat_name.pack_start(lbl1, False, False, 0)
-
- # Stack for the different subcategories - I like crossfade as a transition, but you choose
- stack = Gtk.Stack()
- stack.set_transition_type(Gtk.StackTransitionType.SLIDE_UP_DOWN)
- stack.set_transition_duration(350)
- stack.set_hhomogeneous(False)
- stack.set_vhomogeneous(False)
-
- # Stack needs a stack switcher to allow the user to make different choices
- stack_switcher = Gtk.StackSwitcher()
- stack_switcher.set_orientation(Gtk.Orientation.HORIZONTAL)
- stack_switcher.set_stack(stack)
- stack_switcher.set_homogeneous(True)
-
- # We will need a vbox later for storing the stack and stack switcher together at the end
- vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
-
- # create scroller for when/if these items go "off the page"
- scrolled_switch = Gtk.ScrolledWindow()
- scrolled_switch.add(stack_switcher)
-
- # These lists will ensure that we can keep track of the individual windows and their names
- # stack of vboxes
- vbox_stacks = []
- # name of each vbox - derived from the sub category name
- vbox_stacknames = []
- sep_text = " "
- subcats = {}
- # index for the grid
- index = 0
-
- """
- Store a list of unique sub-categories
- e.g.
- category --> applications
- sub category --> Accessories
- sub category --> Conky
- """
- sub_catlabels = []
- # store unique subcategory names into a dictionary
- for package in packages_list:
- subcats[package.subcategory] = package
- # we now iterate across the dictionary keys
- # each Stack has an associated subcategory
- for subcat in subcats.keys():
- vbox_stacks.append(
- Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
- )
- # for the sub-cat page title
- sub_catlabels.append(Gtk.Label(xalign=0))
-
- vbox_stacknames.append(subcat)
- # iterate across a list of packages
- for package in packages_list:
- if package.subcategory == subcat:
- page = vbox_stacks.pop()
-
- if len(sub_catlabels) > 0:
- lbl_title = sub_catlabels.pop()
- lbl_desc = Gtk.Label(xalign=0)
- lbl_desc.set_markup(
- "Description: "
- + package.subcategory_description
- + ""
- )
- lbl_title.set_markup("" + package.subcategory + "")
-
- lbl_padding_page1 = Gtk.Label(xalign=0)
- lbl_padding_page1.set_text("")
-
- page.pack_start(lbl_title, False, False, 0)
- page.pack_start(lbl_desc, False, False, 0)
- page.pack_start(lbl_padding_page1, False, False, 0)
-
- grid = Gtk.Grid()
- grid.insert_row(index)
-
- lbl_sep1 = Gtk.Label(xalign=0, yalign=0)
- lbl_sep1.set_text(sep_text)
- grid.attach(lbl_sep1, 0, index, 1, 1)
- lbl_package = Gtk.Label(xalign=0, yalign=0) # was in for loop
-
- lbl_package.set_markup("%s" % package.name)
-
- ###### switch widget starts ######
-
- # construct new switch
- switch = Gtk.Switch()
- switch.set_valign(Gtk.Align.CENTER)
-
- """
- Changed to use signal state-set for switch widget.
- set_state(boolean) allows the switch state to be enabled/disabled.
- When a pkg install/uninstall fails, the switch widget is enabled/disabled inside a thread.
-
- Changing the switch using set_active(bool), and using the signal notify::active
- caused a never-ending loop which would call app_toggle.
- """
- switch.set_state(fn.query_pkg(package.name))
- switch.connect(
- "state-set",
- self.app_toggle,
- package,
- )
-
- # add switch widget to grid
- # attach_next_to(child, sibling, side, width, height)
-
- grid.attach_next_to(
- switch, lbl_sep1, Gtk.PositionType.LEFT, 1, 1
- )
-
- # add space seperator next to switch
- lbl_sep_switch = Gtk.Label(xalign=0, yalign=0)
- lbl_sep_switch.set_text(sep_text)
-
- grid.attach_next_to(
- lbl_sep_switch, switch, Gtk.PositionType.LEFT, 1, 1
- )
-
- ###### switch widget ends ######
- ###### pkg name label widget starts ######
-
- lbl_sep_package1 = Gtk.Label(xalign=0, yalign=0)
- lbl_sep_package1.set_text(sep_text)
-
- # add space seperator next to switch for extra padding
-
- grid.attach_next_to(
- lbl_sep_package1, switch, Gtk.PositionType.RIGHT, 1, 1
- )
-
- lbl_sep_package2 = Gtk.Label(xalign=0, yalign=0)
- lbl_sep_package2.set_text(sep_text)
-
- # add pkg name label widget to grid
-
- grid.attach_next_to(
- lbl_package, lbl_sep_package1, Gtk.PositionType.RIGHT, 1, 1
- )
-
- ###### pkg name label widget ends
-
- ###### pkg desc label widget starts ######
-
- lbl_sep_package_desc = Gtk.Label(xalign=0, yalign=0)
- lbl_sep_package_desc.set_text(sep_text)
-
- # add space seperator next to pkg name for extra padding
-
- grid.attach_next_to(
- lbl_sep_package_desc,
- lbl_package,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- lbl_package_desc = Gtk.Label(xalign=0, yalign=0)
- lbl_package_desc.set_text(package.description)
-
- # add pkg desc label widget to grid
-
- grid.attach_next_to(
- lbl_package_desc,
- lbl_sep_package_desc,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- ###### pkg desc label widget ends
-
- ##### add pkg version label widget starts #####
-
- if self.display_versions is True:
- lbl_package_version = Gtk.Label(xalign=0, yalign=0)
- lbl_package_version.set_text(package.version)
- lbl_package_version.set_name("lbl_package_version")
-
- lbl_sep_package_version = Gtk.Label(xalign=0, yalign=0)
- lbl_sep_package_version.set_text(sep_text)
-
- grid.attach_next_to(
- lbl_sep_package_version,
- lbl_package_desc,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- grid.attach_next_to(
- lbl_package_version,
- lbl_sep_package_version,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- ##### pkg version ends #####
-
- # make the page scrollable
- grid_sc = Gtk.ScrolledWindow()
-
- # hide the horizontal scrollbar showing on each grid row if the window width is resized
- grid_sc.set_policy(
- Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC
- )
- grid_sc.add(grid)
-
- grid_sc.set_propagate_natural_height(True)
- # pack the grid to the page.
-
- page.pack_start(grid_sc, True, True, 0)
- # save the page - put it back (now populated)
-
- """
- UI note.
- To remove the extra padding around the switch buttons
- Comment out the references to grid_sc
- Then just have page.pack_start(grid,True, True, 0)
- """
- vbox_stacks.append(page)
-
- # reset the things that we need to.
- # packages.clear()
- grid = Gtk.Grid()
-
- index += 1
-
- # Now we pack the stack
- item_num = 0
-
- for item in vbox_stacks:
- stack.add_titled(
- item,
- "stack" + str(item_num),
- vbox_stacknames[item_num],
- )
- item_num += 1
-
- # Place the stack switcher and the stack together into a vbox
- vbox.pack_start(scrolled_switch, False, False, 0)
-
- scrolled_window = Gtk.ScrolledWindow()
- scrolled_window.set_propagate_natural_height(True)
- scrolled_window.add(stack)
- vbox.pack_start(scrolled_window, True, True, 0)
-
- # Stuff the vbox with the title and seperator to create the page
- vbox_stack.pack_start(cat_name, False, False, 0)
- vbox_stack.pack_start(seperator, False, False, 0)
- vbox_stack.pack_start(vbox, False, False, 0)
-
- except Exception as e:
- fn.logger.error("Exception in App_Frame_GUI.GUI(): %s" % e)
-
diff --git a/usr/share/blackbox/ui/GUI.py b/usr/share/blackbox/ui/GUI.py
deleted file mode 100644
index ddb9bf7..0000000
--- a/usr/share/blackbox/ui/GUI.py
+++ /dev/null
@@ -1,691 +0,0 @@
-#!/bin/python
-
-import Functions as fn
-from ui.AppFrameGUI import AppFrameGUI
-from multiprocessing import cpu_count
-from queue import Queue
-from threading import Thread
-
-import gi
-gi.require_version("Gtk", "3.0")
-from gi.repository import Pango
-
-base_dir = fn.os.path.abspath(fn.os.path.join(fn.os.path.dirname(__file__), ".."))
-
-class GUI_Worker(Thread):
- def __init__(self, queue):
- Thread.__init__(self)
- self.queue = queue
-
- def run(self):
- while True:
- # pull what we need from the queue so we can process properly.
- items = self.queue.get()
- try:
- # make sure we have the required number of items on the queue
- if items is not None:
- self, Gtk, vbox_stack, category, packages = items
- AppFrameGUI.build_ui_frame(
- self,
- Gtk,
- vbox_stack,
- category,
- packages,
- )
-
- except Exception as e:
- fn.logger.error("Exception on run(): %s" % e)
- finally:
- if items is None:
- fn.logger.debug("Stopping GUI Worker thread")
- self.queue.task_done()
- return False
- self.queue.task_done()
-
-class GUI:
- def setup_gui_search(
- self,
- Gtk,
- Gdk,
- GdkPixbuf,
- base_dir,
- os,
- Pango,
- search_results,
- search_term,
- settings,
- ):
- try:
- # remove previous vbox
- if self.search_activated == False:
- self.remove(self.vbox)
- else:
- self.remove(self.vbox_search)
-
- # lets quickly create the latest installed list.
- fn.get_current_installed()
-
- setup_headerbar(self, Gtk, settings)
-
- hbox0 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
-
- self.notification_revealer = Gtk.Revealer()
- self.notification_revealer.set_reveal_child(False)
-
- self.notification_label = Gtk.Label()
-
- pb_panel = GdkPixbuf.Pixbuf().new_from_file(base_dir + "/images/panel.png")
- panel = Gtk.Image().new_from_pixbuf(pb_panel)
-
- overlay_frame = Gtk.Overlay()
- overlay_frame.add(panel)
- overlay_frame.add_overlay(self.notification_label)
-
- self.notification_revealer.add(overlay_frame)
-
- hbox0.pack_start(self.notification_revealer, True, False, 0)
-
- # ==========================================================
- # CONTAINER
- # ==========================================================
-
- self.vbox_search = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
- vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
- hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
-
- self.vbox_search.pack_start(hbox, True, True, 0)
- self.add(self.vbox_search)
-
- # ==========================================================
- # PREP WORK
- # ==========================================================
-
-
-
- # ==========================================================
- # GENERATE STACK
- # ==========================================================
- stack = Gtk.Stack()
- # stack.set_transition_type(Gtk.StackTransitionType.SLIDE_UP_DOWN)
- stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
- stack.set_transition_duration(350)
-
- vbox_stack = []
- stack_item = 0
-
- # Max Threads
- """
- Fatal Python error: Segmentation fault
- This error happens randomly, due to the for loop iteration on the cpu_count
- old code: for x in range(cpu_count()):
- """
-
- # spawn only 1 GUI_Worker threads, as any number greater causes a Segmentation fault
-
- search_worker = GUI_Worker(self.queue)
- search_worker.name = "thread_GUI_search_worker"
- # Set the worker to be True to allow processing, and avoid Blocking
- # search_worker.daemon = True
- search_worker.start()
-
- # This code section might look a little weird. It is because it was
- # derived from another function before this version was required.
-
- for category in search_results:
- # NOTE: IF the yaml file name standard changes, be sure to update this, or weirdness will follow.
-
- # subcategory = search_results[category][0].subcategory
- vbox_stack.append(
- Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
- )
- stack.add_titled(
- vbox_stack[stack_item],
- str("stack" + str(len(vbox_stack))),
- category,
- )
-
- # subcategory_desc = search_results[category][0].subcategory_description
- search_res_lst = search_results[category]
-
- # Multithreading!
-
- self.queue.put(
- (
- self,
- Gtk,
- vbox_stack[stack_item],
- category,
- search_res_lst,
- )
- )
-
- stack_item += 1
-
- # send a signal that no further items are to be put on the queue
- self.queue.put(None)
- # safety to ensure that we finish threading before we continue on.
- self.queue.join()
- fn.logger.debug("GUI Worker thread completed")
-
- stack_switcher = Gtk.StackSidebar()
- stack_switcher.set_name("sidebar")
- stack_switcher.set_stack(stack)
-
- # =====================================================
- # LOGO
- # =====================================================
-
- ivbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
- pixbuf = GdkPixbuf.Pixbuf().new_from_file_at_size(
- os.path.join(base_dir, "images/blackbox.png"), 45, 45
- )
- image = Gtk.Image().new_from_pixbuf(pixbuf)
-
- # remove the focus on startup from search entry
- ivbox.set_property("can-focus", True)
- Gtk.Window.grab_focus(ivbox)
-
- # =====================================================
- # RECACHE BUTTON
- # =====================================================
-
- btn_recache = Gtk.Button(label="Recache Applications")
- btn_recache.connect("clicked", self.recache_clicked)
-
- # =====================================================
- # QUIT BUTTON
- # =====================================================
-
- btn_quit_app = Gtk.Button(label="Quit")
- btn_quit_app.set_size_request(100, 30)
- btn_quit_app.connect("clicked", self.on_close, "delete-event")
- btn_context = btn_quit_app.get_style_context()
- btn_context.add_class("destructive-action")
-
- # =====================================================
- # SEARCH BOX
- # =====================================================
-
- self.searchentry = Gtk.SearchEntry()
- self.searchentry.set_text(search_term)
- self.searchentry.connect("activate", self.on_search_activated)
- self.searchentry.connect("icon-release", self.on_search_cleared)
-
- iv_searchbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
-
- # =====================================================
- # PACKS
- # =====================================================
-
- # hbox1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=2)
- # hbox2 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=2)
- # hbox3 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=2)
-
- # hbox3.pack_start(btnReCache, False, False, 0)
-
- iv_searchbox.pack_start(self.searchentry, False, False, 0)
-
- ivbox.pack_start(image, False, False, 0)
- ivbox.pack_start(iv_searchbox, False, False, 0)
- ivbox.pack_start(stack_switcher, True, True, 0)
-
- ivbox.pack_start(btn_quit_app, False, False, 0)
-
- vbox1.pack_start(hbox0, False, False, 0)
- vbox1.pack_start(stack, True, True, 0)
-
- hbox.pack_start(ivbox, False, True, 0)
- hbox.pack_start(vbox1, True, True, 0)
-
- stack.set_hhomogeneous(False)
- stack.set_vhomogeneous(False)
-
- self.show_all()
-
- except Exception as err:
- fn.logger.error("Exception in GUISearch(): %s" % err)
-
- def setup_gui(self, Gtk, Gdk, GdkPixbuf, base_dir, os, Pango, settings): # noqa
- try:
- # reset back to main box
- if self.search_activated:
- # remove the search vbox
- self.remove(self.vbox_search)
- self.show_all()
-
- # lets quickly create the latest installed list.
- fn.get_current_installed()
-
- # =======================================================
- # HeaderBar
- # =======================================================
-
- setup_headerbar(self, Gtk, settings)
-
- # =======================================================
- # App Notifications
- # =======================================================
-
- hbox0 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
-
- self.notification_revealer = Gtk.Revealer()
- self.notification_revealer.set_reveal_child(False)
-
- self.notification_label = Gtk.Label()
-
- pb_panel = GdkPixbuf.Pixbuf().new_from_file(base_dir + "/images/panel.png")
- panel = Gtk.Image().new_from_pixbuf(pb_panel)
-
- overlay_frame = Gtk.Overlay()
- overlay_frame.add(panel)
- overlay_frame.add_overlay(self.notification_label)
-
- self.notification_revealer.add(overlay_frame)
-
- hbox0.pack_start(self.notification_revealer, True, False, 0)
-
- # ==========================================================
- # CONTAINER
- # ==========================================================
-
- self.vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
- vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
- hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
-
- self.vbox.pack_start(hbox, True, True, 0)
- self.add(self.vbox)
-
- # ==========================================================
- # PREP WORK
- # ==========================================================
-
- # This section sets up the tabs, and the array for dealing with the tab content
- """
- yaml_files_unsorted = []
- path = base_dir + "/yaml/"
- for file in os.listdir(path):
- if file.endswith(".yaml"):
- yaml_files_unsorted.append(file)
- else:
- print(
- "Unsupported configuration file type. Please contact Snigdha OS Support."
- )
- # Need to sort the list (Or do we? I choose to)
- yaml_files = sorted(yaml_files_unsorted)
- """
-
- # Check github for updated files
- # fn.check_github(yaml_files)
- # ==========================================================
- # GENERATE STACK
- # ==========================================================
- stack = Gtk.Stack()
- # stack.set_transition_type(Gtk.StackTransitionType.SLIDE_UP_DOWN)
- stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
- stack.set_transition_duration(350)
-
- vbox_stack = []
- stack_item = 0
-
- # Max Threads
- """
- Fatal Python error: Segmentation fault
- This error happens randomly, due to the for loop iteration on the cpu_count
- old code: for x in range(cpu_count()):
- """
-
- # spawn only 1 GUI_Worker threads, as any number greater causes a Segmentation fault
-
- worker = GUI_Worker(self.queue)
- worker.name = "thread_GUI_Worker"
- # Set the worker to be True to allow processing, and avoid Blocking
- # worker.daemon = True
- worker.start()
-
- for category in self.packages:
- # NOTE: IF the yaml file name standard changes, be sure to update this, or weirdness will follow.
-
- # this is the side stack listing all categories
- vbox_stack.append(
- Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
- )
- stack.add_titled(
- vbox_stack[stack_item],
- str("stack" + str(len(vbox_stack))),
- category,
- )
-
- packages_lst = self.packages[category]
-
- # Multithreading!
- self.queue.put(
- (
- self,
- Gtk,
- vbox_stack[stack_item],
- category,
- packages_lst,
- )
- )
- stack_item += 1
-
- # send a signal that no further items are to be put on the queue
- self.queue.put(None)
- # safety to ensure that we finish threading before we continue on.
-
- self.queue.join()
- fn.logger.debug("GUI Worker thread completed")
-
- stack_switcher = Gtk.StackSidebar()
- stack_switcher.set_name("sidebar")
- stack_switcher.set_stack(stack)
-
- # =====================================================
- # LOGO
- # =====================================================
-
- ivbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
- pixbuf = GdkPixbuf.Pixbuf().new_from_file_at_size(
- os.path.join(base_dir, "images/blackbox.png"), 45, 45
- )
- image = Gtk.Image().new_from_pixbuf(pixbuf)
-
- # remove the focus on startup from search entry
- ivbox.set_property("can-focus", True)
- Gtk.Window.grab_focus(ivbox)
-
- # =====================================================
- # RECACHE BUTTON
- # =====================================================
-
- # btnReCache = Gtk.Button(label="Recache Applications")
- # btnReCache.connect("clicked", self.recache_clicked)
- # btnReCache.set_property("has-tooltip", True)
- # btnReCache.connect("query-tooltip", self.tooltip_callback,
- # "Refresh the application cache")
-
- # =====================================================
- # REPOS
- # =====================================================
-
- # =====================================================
- # QUIT BUTTON
- # =====================================================
- btn_quit_app = Gtk.Button(label="Quit")
- btn_quit_app.set_size_request(100, 30)
- btn_quit_app.connect("clicked", self.on_close, "delete-event")
- btn_context = btn_quit_app.get_style_context()
- btn_context.add_class("destructive-action")
- # =====================================================
- # SEARCH BOX
- # =====================================================
- self.searchentry = Gtk.SearchEntry()
- self.searchentry.set_placeholder_text("Search...")
- self.searchentry.connect("activate", self.on_search_activated)
- self.searchentry.connect("icon-release", self.on_search_cleared)
-
- ivsearchbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
-
- ivsearchbox.pack_start(self.searchentry, False, False, 0)
-
- ivbox.pack_start(image, False, False, 0)
- ivbox.pack_start(ivsearchbox, False, False, 0)
- ivbox.pack_start(stack_switcher, True, True, 0)
- ivbox.pack_start(btn_quit_app, False, False, 0)
-
- vbox1.pack_start(hbox0, False, False, 0)
- vbox1.pack_start(stack, True, True, 0)
-
- hbox.pack_start(ivbox, False, True, 0)
- hbox.pack_start(vbox1, True, True, 0)
-
- stack.set_hhomogeneous(False)
- stack.set_vhomogeneous(False)
-
- if self.search_activated:
- self.show_all()
-
- except Exception as e:
- fn.logger.error("Exception in GUI(): %s" % e)
-
-
-# setup headerbar including popover settings
-def setup_headerbar(self, Gtk, settings):
- try:
- header_bar_title = "BlackBox"
- headerbar = Gtk.HeaderBar()
- headerbar.set_title(header_bar_title)
- headerbar.set_show_close_button(True)
-
- self.set_titlebar(headerbar)
-
- toolbutton = Gtk.ToolButton()
- # icon-name open-menu-symbolic / open-menu-symbolic.symbolic
- toolbutton.set_icon_name("open-menu-symbolic")
-
- toolbutton.connect("clicked", self.on_settings_clicked)
-
- headerbar.pack_end(toolbutton)
-
- self.popover = Gtk.Popover()
- self.popover.set_relative_to(toolbutton)
-
- vbox = Gtk.Box(spacing=0, orientation=Gtk.Orientation.VERTICAL)
- vbox.set_border_width(15)
-
- # switches
-
- # switch to display package versions
- self.switch_package_version = Gtk.Switch()
-
- if settings != None:
- if settings["Display Package Versions"]:
- self.display_versions = settings["Display Package Versions"]
-
- if self.display_versions == True:
- self.switch_package_version.set_active(True)
- else:
- self.switch_package_version.set_active(False)
-
- self.switch_package_version.connect("notify::active", self.version_toggle)
-
- # switch to import arcolinux keyring
- self.switch_snigdhaos_keyring = Gtk.Switch()
-
- if (
- fn.check_package_installed("snigdhaos-keyring") is False
- or fn.verify_snigdhaos_pacman_conf() is False
- ):
- self.switch_snigdhaos_keyring.set_state(False)
-
- else:
- self.switch_snigdhaos_keyring.set_state(True)
-
- self.switch_snigdhaos_keyring.connect("state-set", self.snigdhaos_keyring_toggle)
-
- # switch to import arcolinix mirrorlist
- self.switch_snigdhaos_mirrorlist = Gtk.Switch()
-
- if (
- fn.check_package_installed("snigdhaos-mirrorlist") is False
- or fn.verify_snigdhaos_pacman_conf() is False
- ):
- self.switch_snigdhaos_mirrorlist.set_state(False)
-
- else:
- self.switch_snigdhaos_mirrorlist.set_state(True)
-
- self.switch_snigdhaos_mirrorlist.connect("state-set", self.snigdhaos_mirrorlist_toggle)
-
- # switch to display package progress window
- self.switch_package_progress = Gtk.Switch()
-
- if settings != None:
- if settings["Display Package Progress"]:
- self.display_package_progress = settings["Display Package Progress"]
-
- if self.display_package_progress == True:
- self.switch_package_progress.set_active(True)
- else:
- self.switch_package_progress.set_active(False)
- self.switch_package_progress.connect(
- "notify::active", self.package_progress_toggle
- )
-
- # modalbuttons
-
- # button to open the pacman log monitoring dialog
- self.modelbtn_pacmanlog = Gtk.ModelButton()
- self.modelbtn_pacmanlog.connect("clicked", self.on_pacman_log_clicked)
- self.modelbtn_pacmanlog.set_name("modelbtn_popover")
- self.modelbtn_pacmanlog.props.centered = False
- self.modelbtn_pacmanlog.props.text = "Open Pacman Log File"
-
- # button to display installed packages window
- modelbtn_packages_export = Gtk.ModelButton()
- modelbtn_packages_export.connect("clicked", self.on_packages_export_clicked)
- modelbtn_packages_export.set_name("modelbtn_popover")
- modelbtn_packages_export.props.centered = False
- modelbtn_packages_export.props.text = "Show Installed Packages"
-
- # button to display import packages window
- modelbtn_packages_import = Gtk.ModelButton()
- modelbtn_packages_import.connect("clicked", self.on_packages_import_clicked)
- modelbtn_packages_import.set_name("modelbtn_popover")
- modelbtn_packages_import.props.centered = False
- modelbtn_packages_import.props.text = "Import Packages"
-
- # button to show about dialog
- modelbtn_about_app = Gtk.ModelButton()
- modelbtn_about_app.connect("clicked", self.on_about_app_clicked)
- modelbtn_about_app.set_name("modelbtn_popover")
- modelbtn_about_app.props.centered = False
- modelbtn_about_app.props.text = "About BlackBox"
-
- # button to show iso package lists window
- # modelbtn_iso_packages_list = Gtk.ModelButton()
- # modelbtn_iso_packages_list.connect(
- # "clicked", self.on_arcolinux_iso_packages_clicked
- # )
- # modelbtn_iso_packages_list.set_name("modelbtn_popover")
- # modelbtn_iso_packages_list.props.centered = False
- # modelbtn_iso_packages_list.props.text = "Explore ArcoLinux ISO Packages"
-
- # button to show package search window
- modelbtn_package_search = Gtk.ModelButton()
- modelbtn_package_search.connect("clicked", self.on_package_search_clicked)
- modelbtn_package_search.set_name("modelbtn_popover")
- modelbtn_package_search.props.centered = False
- modelbtn_package_search.props.text = "Open Package Search"
-
- # grid for the switch options
- grid_switches = Gtk.Grid()
- grid_switches.set_row_homogeneous(True)
-
- lbl_package_version = Gtk.Label(xalign=0)
- lbl_package_version.set_text("Display Package Versions")
-
- lbl_package_version_padding = Gtk.Label(xalign=0)
- lbl_package_version_padding.set_text(" ")
-
- lbl_package_progress = Gtk.Label(xalign=0)
- lbl_package_progress.set_text("Display Package Progress")
-
- lbl_package_progress_padding = Gtk.Label(xalign=0)
- lbl_package_progress_padding.set_text(" ")
-
- lbl_snigdhaos_keyring = Gtk.Label(xalign=0)
- lbl_snigdhaos_keyring.set_text("Import Snigdha OS Keyring")
-
- lbl_snigdhaos_keyring_padding = Gtk.Label(xalign=0)
- lbl_snigdhaos_keyring_padding.set_text(" ")
-
- lbl_snigdhaos_mirrorlist = Gtk.Label(xalign=0)
- lbl_snigdhaos_mirrorlist.set_text("Import Snigdha OS Mirrorlist")
-
- lbl_snigdhaos_mirrorlist_padding = Gtk.Label(xalign=0)
- lbl_snigdhaos_mirrorlist_padding.set_text(" ")
-
- grid_switches.attach(lbl_package_version, 0, 1, 1, 1)
- grid_switches.attach_next_to(
- lbl_package_version_padding,
- lbl_package_version,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- grid_switches.attach_next_to(
- self.switch_package_version,
- lbl_package_version_padding,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- grid_switches.attach(lbl_package_progress, 0, 2, 1, 1)
- grid_switches.attach_next_to(
- lbl_package_progress_padding,
- lbl_package_progress,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- grid_switches.attach_next_to(
- self.switch_package_progress,
- lbl_package_progress_padding,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- grid_switches.attach(lbl_snigdhaos_keyring, 0, 3, 1, 1)
- grid_switches.attach_next_to(
- lbl_snigdhaos_keyring_padding,
- lbl_snigdhaos_keyring,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- grid_switches.attach_next_to(
- self.switch_snigdhaos_keyring,
- lbl_snigdhaos_keyring_padding,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- grid_switches.attach(lbl_snigdhaos_mirrorlist, 0, 4, 1, 1)
- grid_switches.attach_next_to(
- lbl_snigdhaos_mirrorlist_padding,
- lbl_snigdhaos_mirrorlist,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- grid_switches.attach_next_to(
- self.switch_snigdhaos_mirrorlist,
- lbl_snigdhaos_mirrorlist_padding,
- Gtk.PositionType.RIGHT,
- 1,
- 1,
- )
-
- vbox_buttons = Gtk.Box(spacing=1, orientation=Gtk.Orientation.VERTICAL)
- vbox_buttons.pack_start(self.modelbtn_pacmanlog, False, True, 0)
- vbox_buttons.pack_start(modelbtn_packages_export, False, True, 0)
- vbox_buttons.pack_start(modelbtn_packages_import, False, True, 0)
- # vbox_buttons.pack_start(modelbtn_iso_packages_list, False, True, 0)
- vbox_buttons.pack_start(modelbtn_package_search, False, True, 0)
- vbox_buttons.pack_start(modelbtn_about_app, False, True, 0)
-
- vbox.pack_start(grid_switches, False, False, 0)
- vbox.pack_start(vbox_buttons, False, False, 0)
-
- self.popover.add(vbox)
- self.popover.set_position(Gtk.PositionType.BOTTOM)
- except Exception as e:
- fn.logger.error("Exception in setup_headerbar(): %s" % e)
diff --git a/usr/share/blackbox/ui/MessageDialog.py b/usr/share/blackbox/ui/MessageDialog.py
deleted file mode 100644
index 45cc776..0000000
--- a/usr/share/blackbox/ui/MessageDialog.py
+++ /dev/null
@@ -1,118 +0,0 @@
-# This class is used to create a modal dialog window showing detailed information about an event
-
-import os
-import gi
-import Functions as fn
-
-gi.require_version("Gtk", "3.0")
-from gi.repository import Gtk
-
-base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
-# base_dir = os.path.dirname(os.path.realpath(__file__))
-
-
-class MessageDialog(Gtk.Dialog):
- # message_type is a string, either one of "info", "warning", "error" to show which infobar to display
- # extended argument when set to true shows a textview inside the dialog
- # extended argument when set to false only shows a standard dialog
- def __init__(
- self, title, subtitle, first_msg, secondary_msg, message_type, extended
- ):
- Gtk.Dialog.__init__(self)
-
- headerbar = Gtk.HeaderBar()
- headerbar.set_title(title)
- headerbar.set_show_close_button(True)
-
- self.set_resizable(True)
-
- self.set_border_width(10)
-
- self.set_titlebar(headerbar)
-
- btn_ok = Gtk.Button(label="OK")
- btn_ok.set_size_request(100, 30)
- btn_ok.connect("clicked", on_message_dialog_ok_response, self)
- btn_ok.set_halign(Gtk.Align.END)
- self.set_icon_from_file(os.path.join(base_dir, "images/blackbox.png"))
-
- infobar = Gtk.InfoBar()
-
- if message_type == "info":
- infobar.set_name("infobar_info")
- if message_type == "error":
- infobar.set_name("infobar_error")
- if message_type == "warning":
- infobar.set_name("infobar_warning")
-
- lbl_title_message = Gtk.Label(xalign=0, yalign=0)
- lbl_title_message.set_markup("%s" % subtitle)
- content = infobar.get_content_area()
- content.add(lbl_title_message)
-
- infobar.set_revealed(True)
-
- lbl_padding1 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding1.set_text("")
-
- lbl_padding2 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding2.set_text("")
-
- grid_message = Gtk.Grid()
-
- grid_message.attach(infobar, 0, 0, 1, 1)
- grid_message.attach(lbl_padding1, 0, 1, 1, 1)
-
- if extended is True:
- scrolled_window = Gtk.ScrolledWindow()
- textview = Gtk.TextView()
- textview.set_property("editable", False)
- textview.set_property("monospace", True)
- textview.set_border_width(10)
- textview.set_vexpand(True)
- textview.set_hexpand(True)
-
- msg_buffer = textview.get_buffer()
- msg_buffer.insert(
- msg_buffer.get_end_iter(),
- "Event timestamp = %s\n"
- % fn.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
- )
- msg_buffer.insert(msg_buffer.get_end_iter(), "%s\n" % first_msg)
- msg_buffer.insert(msg_buffer.get_end_iter(), "%s\n" % secondary_msg)
-
- # move focus away from the textview, to hide the cursor at load
- headerbar.set_property("can-focus", True)
- Gtk.Window.grab_focus(headerbar)
-
- scrolled_window.add(textview)
-
- grid_message.attach(scrolled_window, 0, 2, 1, 1)
- grid_message.attach(lbl_padding2, 0, 3, 1, 1)
-
- self.set_default_size(800, 600)
-
- else:
- # do not display textview
- lbl_first_message = Gtk.Label(xalign=0, yalign=0)
- lbl_first_message.set_text(first_msg)
-
- lbl_second_message = Gtk.Label(xalign=0, yalign=0)
- lbl_second_message.set_markup("%s" % secondary_msg)
-
- grid_message.attach(lbl_first_message, 0, 2, 1, 1)
- grid_message.attach(lbl_second_message, 0, 3, 1, 1)
-
- self.set_default_size(600, 100)
- self.set_resizable(False)
-
- vbox_close = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
- vbox_close.pack_start(btn_ok, True, True, 1)
-
- self.vbox.add(grid_message)
- self.vbox.add(vbox_close)
-
-
-def on_message_dialog_ok_response(self, widget):
- # widget.hide()
- widget.destroy()
diff --git a/usr/share/blackbox/ui/PackageListDialog.py b/usr/share/blackbox/ui/PackageListDialog.py
deleted file mode 100644
index c5e59c0..0000000
--- a/usr/share/blackbox/ui/PackageListDialog.py
+++ /dev/null
@@ -1,283 +0,0 @@
-# This class is used to create a modal dialog window to display currently installed packages
-
-import os
-import gi
-import Functions as fn
-from ui.MessageDialog import MessageDialog
-from queue import Queue
-from gi.repository import Gtk, Gdk, GdkPixbuf, Pango, GLib
-
-gi.require_version("Gtk", "3.0")
-
-base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
-# base_dir = os.path.dirname(os.path.realpath(__file__))
-
-
-class PackageListDialog(Gtk.Dialog):
- def __init__(self):
- Gtk.Dialog.__init__(self)
-
- # Create a queue for storing package list exports to display inside PackageListDialog
- self.pkg_export_queue = Queue()
-
- self.filename = "%s/packages-x86_64.txt" % (fn.export_dir,)
-
- self.set_resizable(True)
- self.set_size_request(1050, 700)
- self.set_modal(True)
-
- self.set_border_width(10)
- self.set_icon_from_file(os.path.join(base_dir, "images/blackbox.png"))
-
- self.connect("delete-event", self.on_close)
-
- self.installed_packages_list = None
-
- self.headerbar = Gtk.HeaderBar()
- self.headerbar.set_title("Loading please wait ..")
- self.headerbar.set_show_close_button(True)
-
- self.set_titlebar(self.headerbar)
-
- self.grid_packageslst = Gtk.Grid()
- self.grid_packageslst.set_column_homogeneous(True)
-
- self.lbl_info = Gtk.Label(xalign=0, yalign=0)
- self.lbl_info.set_text("Export destination %s" % self.filename)
-
- # get a list of installed packages on the system
-
- self.pacman_export_cmd = ["pacman", "-Qien"]
-
- fn.Thread(
- target=fn.get_installed_package_data,
- args=(self,),
- daemon=True,
- ).start()
-
- fn.Thread(target=self.check_queue, daemon=True).start()
-
- def setup_gui(self):
- if len(self.installed_packages_list) > 0:
- self.set_title(
- "Showing %s installed packages" % len(self.installed_packages_list)
- )
-
- search_entry = Gtk.SearchEntry()
- search_entry.set_placeholder_text("Search...")
-
- # remove the focus on startup from search entry
- self.headerbar.set_property("can-focus", True)
- Gtk.Window.grab_focus(self.headerbar)
-
- treestore_packages = Gtk.TreeStore(str, str, str, str, str)
- for item in sorted(self.installed_packages_list):
- treestore_packages.append(None, list(item))
-
- treeview_packages = Gtk.TreeView()
- treeview_packages.set_search_entry(search_entry)
-
- treeview_packages.set_model(treestore_packages)
-
- for i, col_title in enumerate(
- [
- "Name",
- "Installed Version",
- "Latest Version",
- "Installed Size",
- "Installed Date",
- ]
- ):
- renderer = Gtk.CellRendererText()
- col = Gtk.TreeViewColumn(col_title, renderer, text=i)
- treeview_packages.append_column(col)
-
- # allow sorting by installed date
-
- col_installed_date = treeview_packages.get_column(4)
- col_installed_date.set_sort_column_id(4)
-
- treestore_packages.set_sort_func(4, self.compare_install_date, None)
-
- path = Gtk.TreePath.new_from_indices([0])
-
- selection = treeview_packages.get_selection()
- selection.select_path(path)
-
- treeview_packages.expand_all()
- treeview_packages.columns_autosize()
-
- scrolled_window = Gtk.ScrolledWindow()
- scrolled_window.set_vexpand(True)
- scrolled_window.set_hexpand(True)
-
- self.grid_packageslst.attach(scrolled_window, 0, 0, 8, 10)
-
- lbl_padding1 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding1.set_text("")
-
- self.grid_packageslst.attach_next_to(
- lbl_padding1, scrolled_window, Gtk.PositionType.BOTTOM, 1, 1
- )
-
- btn_dialog_export = Gtk.Button(label="Export")
- btn_dialog_export.connect("clicked", self.on_dialog_export_clicked)
- btn_dialog_export.set_size_request(100, 30)
- btn_dialog_export.set_halign(Gtk.Align.END)
-
- btn_dialog_export_close = Gtk.Button(label="Close")
- btn_dialog_export_close.connect("clicked", self.on_close, "delete-event")
- btn_dialog_export_close.set_size_request(100, 30)
- btn_dialog_export_close.set_halign(Gtk.Align.END)
-
- scrolled_window.add(treeview_packages)
-
- grid_btn = Gtk.Grid()
- grid_btn.attach(btn_dialog_export, 0, 1, 1, 1)
-
- lbl_padding2 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding2.set_text(" ")
-
- grid_btn.attach_next_to(
- lbl_padding2, btn_dialog_export, Gtk.PositionType.RIGHT, 1, 1
- )
-
- grid_btn.attach_next_to(
- btn_dialog_export_close, lbl_padding2, Gtk.PositionType.RIGHT, 1, 1
- )
-
- grid_btn.set_halign(Gtk.Align.END)
-
- vbox_btn = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
- vbox_btn.pack_start(grid_btn, True, True, 1)
-
- lbl_padding3 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding3.set_text("")
-
- self.vbox.add(search_entry)
- self.vbox.add(lbl_padding3)
- self.vbox.add(self.grid_packageslst)
- self.vbox.add(self.lbl_info)
- self.vbox.add(vbox_btn)
-
- self.show_all()
-
- def check_queue(self):
- while True:
- self.installed_packages_list = self.pkg_export_queue.get()
-
- if self.installed_packages_list is not None:
- break
-
- self.pkg_export_queue.task_done()
-
- GLib.idle_add(self.setup_gui, priority=GLib.PRIORITY_DEFAULT)
-
- def on_close(self, dialog, event):
- self.hide()
- self.destroy()
-
- def on_dialog_export_clicked(self, dialog):
- try:
- if not os.path.exists(fn.export_dir):
- fn.makedirs(fn.export_dir)
- fn.permissions(fn.export_dir)
-
- with open(self.filename, "w", encoding="utf-8") as f:
- f.write(
- "# This file was auto-generated by BlackBox on %s at %s\n"
- % (
- fn.datetime.today().date(),
- fn.datetime.now().strftime("%H:%M:%S"),
- )
- )
-
- f.write(
- "# Exported explicitly installed packages using %s\n"
- % " ".join(self.pacman_export_cmd)
- )
-
- for package in sorted(self.installed_packages_list):
- f.write("%s\n" % (package[0]))
-
- if os.path.exists(self.filename):
- fn.logger.info("Export completed")
-
- # fix permissions, file is owned by root
- fn.permissions(self.filename)
-
- message_dialog = MessageDialog(
- "Info",
- "Package export complete",
- "Package list exported to %s" % self.filename,
- "",
- "info",
- False,
- )
-
- message_dialog.show_all()
- message_dialog.run()
- message_dialog.hide()
- message_dialog.destroy()
-
- else:
- fn.logger.error("Export failed")
-
- message_dialog = MessageDialog(
- "Error",
- "Package export failed",
- "Failed to export package list to %s." % self.filename,
- "",
- "error",
- False,
- )
-
- message_dialog.show_all()
- message_dialog.run()
- message_dialog.hide()
- message_dialog.destroy()
-
- except Exception as e:
- fn.logger.error("Exception in on_dialog_export_clicked(): %s" % e)
-
- # noqa: any locales other than en_GB.UTF-8 / en_US.UTF-8 are untested
- def compare_install_date(self, model, row1, row2, user_data):
- try:
- sort_column, _ = model.get_sort_column_id()
- str_value1 = model.get_value(row1, sort_column)
- str_value2 = model.get_value(row2, sort_column)
-
- datetime_value1 = None
- datetime_value2 = None
-
- # convert string into datetime object, check if time format is 12H format with AM/PM
- if str_value1.lower().find("am") > 0 or str_value1.lower().find("pm") > 0:
- # 12H format
- datetime_value1 = fn.datetime.strptime(
- str_value1, "%a %d %b %Y %I:%M:%S %p %Z"
- ).replace(tzinfo=None)
- datetime_value2 = fn.datetime.strptime(
- str_value2, "%a %d %b %Y %I:%M:%S %p %Z"
- ).replace(tzinfo=None)
- else:
- # 24H format
- datetime_value1 = fn.datetime.strptime(
- str_value1, "%a %d %b %Y %H:%M:%S %Z"
- ).replace(tzinfo=None)
- datetime_value2 = fn.datetime.strptime(
- str_value2, "%a %d %b %Y %H:%M:%S %Z"
- ).replace(tzinfo=None)
-
- if datetime_value1 is not None and datetime_value2 is not None:
- if datetime_value1 < datetime_value2:
- return -1
- elif datetime_value1 == datetime_value2:
- return 0
- else:
- return 1
- except ValueError as ve:
- # fn.logger.error("ValueError in compare_install_date: %s" % ve)
- # compare fails due to the format of the datetime string, which hasn't been tested
- pass
- except Exception as e:
- fn.logger.error("Exception in compare_install_date: %s" % e)
diff --git a/usr/share/blackbox/ui/PackageSearchWindow.py b/usr/share/blackbox/ui/PackageSearchWindow.py
deleted file mode 100644
index ed17411..0000000
--- a/usr/share/blackbox/ui/PackageSearchWindow.py
+++ /dev/null
@@ -1,542 +0,0 @@
-# This class is used to create a window for package name searches and to display package information
-
-import os
-import gi
-
-import Functions as fn
-from ui.MessageDialog import MessageDialog
-
-from gi.repository import Gtk, Gdk, GdkPixbuf, Pango, GLib
-gi.require_version("Gtk", "3.0")
-
-base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
-
-
-class PackageSearchWindow(Gtk.Window):
- def __init__(self):
- Gtk.Window.__init__(self)
-
- self.headerbar = Gtk.HeaderBar()
- self.headerbar.set_title("Package Search")
- self.headerbar.set_show_close_button(True)
-
- # remove the focus on startup from search entry
- self.headerbar.set_property("can-focus", True)
- Gtk.Window.grab_focus(self.headerbar)
-
- self.set_resizable(True)
- self.set_size_request(700, 500)
- self.set_border_width(10)
- self.set_titlebar(self.headerbar)
- self.set_icon_from_file(os.path.join(base_dir, "images/blackbox.png"))
- self.search_package_activated = False
- self.build_gui()
-
- def build_gui(self):
- self.stack = Gtk.Stack()
- self.stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
- self.stack.set_transition_duration(350)
- self.stack.set_hhomogeneous(False)
- self.stack.set_vhomogeneous(False)
-
- stack_switcher = Gtk.StackSwitcher()
- stack_switcher.set_orientation(Gtk.Orientation.HORIZONTAL)
- stack_switcher.set_stack(self.stack)
- stack_switcher.set_homogeneous(True)
-
- searchentry = Gtk.SearchEntry()
- searchentry.set_placeholder_text("Search using package name...")
- searchentry.set_size_request(400, 0)
- searchentry.connect("activate", self.on_search_package_activated)
- searchentry.connect("icon-release", self.on_search_package_cleared)
-
- btn_ok = Gtk.Button(label="OK")
- btn_ok.set_size_request(100, 30)
- btn_ok.connect("clicked", self.on_close)
- btn_ok.set_halign(Gtk.Align.END)
-
- grid_bottom = Gtk.Grid()
- grid_bottom.attach(btn_ok, 0, 1, 1, 1)
- grid_bottom.set_halign(Gtk.Align.END)
-
- vbox_bottom = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
- lbl_padding_bottom = Gtk.Label(xalign=0, yalign=0)
- lbl_padding_bottom.set_text("")
-
- vbox_bottom.pack_start(lbl_padding_bottom, False, True, 0)
- vbox_bottom.pack_start(grid_bottom, False, True, 0)
-
- self.stack.add_titled(searchentry, "Package Search", "Package Search")
-
- vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
- vbox.set_border_width(10)
-
- vbox.pack_start(stack_switcher, False, False, 0)
- vbox.pack_start(self.stack, False, False, 0)
- vbox.pack_end(vbox_bottom, False, True, 0)
-
- self.add(vbox)
- self.show_all()
-
- thread_pacman_sync_file_db = fn.threading.Thread(
- name="thread_pacman_sync_file_db",
- target=fn.sync_file_db,
- daemon=True,
- )
- thread_pacman_sync_file_db.start()
-
- def on_close(self, widget):
- self.hide()
- self.destroy()
-
- def on_search_package_activated(self, searchentry):
- if searchentry.get_text_length() == 0 and self.search_package_activated:
- self.search_package_activated = False
- self.stack.get_child_by_name("Package Information").destroy()
-
- self.stack.get_child_by_name("Package Files").destroy()
- Gtk.Window.grab_focus(self.headerbar)
- else:
- self.perform_search(searchentry)
-
- def on_search_package_cleared(self, searchentry, icon_pos, event):
- searchentry.set_placeholder_text("Search using package name...")
- if self.search_package_activated is True:
- self.search_package_activated = False
- self.stack.get_child_by_name("Package Information").destroy()
-
- self.stack.get_child_by_name("Package Files").destroy()
-
- Gtk.Window.grab_focus(self.headerbar)
-
- def perform_search(self, searchentry):
- try:
- if (
- len(searchentry.get_text().rstrip().lstrip()) > 0
- and not searchentry.get_text().isspace()
- ):
- term = searchentry.get_text().rstrip().lstrip()
-
- if len(term) > 0:
- fn.logger.info("Searching pacman file database")
-
- package_metadata = fn.get_package_information(term)
-
- if package_metadata is not None:
- # package information
-
- if self.search_package_activated is True:
- self.stack.get_child_by_name(
- "Package Information"
- ).destroy()
-
- self.stack.get_child_by_name("Package Files").destroy()
-
- box_outer = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=5
- )
-
- listbox = Gtk.ListBox()
- listbox.set_selection_mode(Gtk.SelectionMode.NONE)
- box_outer.pack_start(listbox, True, True, 0)
-
- # package name
- row_package_title = Gtk.ListBoxRow()
- vbox_package_title = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_title.add(vbox_package_title)
- lbl_package_name_title = Gtk.Label(xalign=0)
- lbl_package_name_title.set_markup("Package Name")
-
- lbl_package_name_value = Gtk.Label(xalign=0)
- lbl_package_name_value.set_text(package_metadata["name"])
- vbox_package_title.pack_start(
- lbl_package_name_title, True, True, 0
- )
- vbox_package_title.pack_start(
- lbl_package_name_value, True, True, 0
- )
-
- listbox.add(row_package_title)
-
- # repository
-
- row_package_repo = Gtk.ListBoxRow()
- vbox_package_repo = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_repo.add(vbox_package_repo)
- lbl_package_repo_title = Gtk.Label(xalign=0)
- lbl_package_repo_title.set_markup("Repository")
-
- lbl_package_repo_value = Gtk.Label(xalign=0)
- lbl_package_repo_value.set_text(package_metadata["repository"])
- vbox_package_repo.pack_start(
- lbl_package_repo_title, True, True, 0
- )
- vbox_package_repo.pack_start(
- lbl_package_repo_value, True, True, 0
- )
-
- listbox.add(row_package_repo)
-
- # description
-
- row_package_description = Gtk.ListBoxRow()
- vbox_package_description = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_description.add(vbox_package_description)
- lbl_package_description_title = Gtk.Label(xalign=0)
- lbl_package_description_title.set_markup("Description")
-
- lbl_package_description_value = Gtk.Label(xalign=0)
- lbl_package_description_value.set_text(
- package_metadata["description"]
- )
- vbox_package_description.pack_start(
- lbl_package_description_title, True, True, 0
- )
- vbox_package_description.pack_start(
- lbl_package_description_value, True, True, 0
- )
-
- listbox.add(row_package_description)
-
- # arch
-
- row_package_arch = Gtk.ListBoxRow()
- vbox_package_arch = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_arch.add(vbox_package_arch)
- lbl_package_arch_title = Gtk.Label(xalign=0)
- lbl_package_arch_title.set_markup("Architecture")
-
- lbl_package_arch_value = Gtk.Label(xalign=0)
- lbl_package_arch_value.set_text(package_metadata["arch"])
- vbox_package_arch.pack_start(
- lbl_package_arch_title, True, True, 0
- )
- vbox_package_arch.pack_start(
- lbl_package_arch_value, True, True, 0
- )
-
- listbox.add(row_package_arch)
-
- # url
-
- row_package_url = Gtk.ListBoxRow()
- vbox_package_url = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_url.add(vbox_package_url)
- lbl_package_url_title = Gtk.Label(xalign=0)
- lbl_package_url_title.set_markup("URL")
-
- lbl_package_url_value = Gtk.Label(xalign=0)
- lbl_package_url_value.set_markup(
- "%s"
- % (package_metadata["url"], package_metadata["url"])
- )
- vbox_package_url.pack_start(
- lbl_package_url_title, True, True, 0
- )
- vbox_package_url.pack_start(
- lbl_package_url_value, True, True, 0
- )
-
- listbox.add(row_package_url)
-
- # download size
-
- row_package_size = Gtk.ListBoxRow()
- vbox_package_size = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_size.add(vbox_package_size)
- lbl_package_size_title = Gtk.Label(xalign=0)
- lbl_package_size_title.set_markup("Download size")
-
- lbl_package_size_value = Gtk.Label(xalign=0)
- lbl_package_size_value.set_text(
- package_metadata["download_size"]
- )
- vbox_package_size.pack_start(
- lbl_package_size_title, True, True, 0
- )
- vbox_package_size.pack_start(
- lbl_package_size_value, True, True, 0
- )
-
- listbox.add(row_package_size)
-
- # installed size
-
- row_package_installed_size = Gtk.ListBoxRow()
- vbox_package_installed_size = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_installed_size.add(vbox_package_installed_size)
- lbl_package_installed_size_title = Gtk.Label(xalign=0)
- lbl_package_installed_size_title.set_markup(
- "Installed size"
- )
-
- lbl_package_installed_size_value = Gtk.Label(xalign=0)
- lbl_package_installed_size_value.set_text(
- package_metadata["installed_size"]
- )
- vbox_package_installed_size.pack_start(
- lbl_package_installed_size_title, True, True, 0
- )
- vbox_package_installed_size.pack_start(
- lbl_package_installed_size_value, True, True, 0
- )
-
- listbox.add(row_package_installed_size)
-
- # build date
-
- row_package_build_date = Gtk.ListBoxRow()
- vbox_package_build_date = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_build_date.add(vbox_package_build_date)
- lbl_package_build_date_title = Gtk.Label(xalign=0)
- lbl_package_build_date_title.set_markup("Build date")
-
- lbl_package_build_date_value = Gtk.Label(xalign=0)
- lbl_package_build_date_value.set_text(
- package_metadata["build_date"]
- )
- vbox_package_build_date.pack_start(
- lbl_package_build_date_title, True, True, 0
- )
- vbox_package_build_date.pack_start(
- lbl_package_build_date_value, True, True, 0
- )
-
- listbox.add(row_package_build_date)
-
- # packager
-
- row_package_maintainer = Gtk.ListBoxRow()
- vbox_package_maintainer = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_maintainer.add(vbox_package_maintainer)
- lbl_package_maintainer_title = Gtk.Label(xalign=0)
- lbl_package_maintainer_title.set_markup("Packager")
-
- lbl_package_maintainer_value = Gtk.Label(xalign=0)
- lbl_package_maintainer_value.set_text(
- package_metadata["packager"]
- )
- vbox_package_maintainer.pack_start(
- lbl_package_maintainer_title, True, True, 0
- )
- vbox_package_maintainer.pack_start(
- lbl_package_maintainer_value, True, True, 0
- )
-
- listbox.add(row_package_maintainer)
-
- # depends on
-
- expander_depends_on = Gtk.Expander()
- expander_depends_on.set_expanded(True)
- expander_depends_on.set_use_markup(True)
- expander_depends_on.set_resize_toplevel(True)
- expander_depends_on.set_label("Depends on")
-
- row_package_depends_on = Gtk.ListBoxRow()
- expander_depends_on.add(row_package_depends_on)
- vbox_package_depends_on = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_depends_on.add(vbox_package_depends_on)
-
- if len(package_metadata["depends_on"]) > 0:
- treestore_depends = Gtk.TreeStore(str, str)
-
- for item in package_metadata["depends_on"]:
- treestore_depends.append(None, list(item))
-
- treeview_depends = Gtk.TreeView(model=treestore_depends)
-
- renderer = Gtk.CellRendererText()
- column = Gtk.TreeViewColumn("Package", renderer, text=0)
-
- treeview_depends.append_column(column)
-
- vbox_package_depends_on.pack_start(
- treeview_depends, True, True, 0
- )
-
- else:
- lbl_package_depends_value = Gtk.Label(xalign=0, yalign=0)
- lbl_package_depends_value.set_text("None")
-
- vbox_package_depends_on.pack_start(
- lbl_package_depends_value, True, True, 0
- )
-
- listbox.add(expander_depends_on)
-
- # conflicts with
-
- expander_conflicts_with = Gtk.Expander()
- expander_conflicts_with.set_use_markup(True)
- expander_conflicts_with.set_expanded(True)
- expander_conflicts_with.set_resize_toplevel(True)
- expander_conflicts_with.set_label("Conflicts with")
-
- row_package_conflicts_with = Gtk.ListBoxRow()
- expander_conflicts_with.add(row_package_conflicts_with)
- vbox_package_conflicts_with = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_conflicts_with.add(vbox_package_conflicts_with)
-
- if len(package_metadata["conflicts_with"]) > 0:
- treestore_conflicts = Gtk.TreeStore(str, str)
-
- for item in package_metadata["conflicts_with"]:
- treestore_conflicts.append(None, list(item))
-
- treeview_conflicts = Gtk.TreeView(model=treestore_conflicts)
-
- renderer = Gtk.CellRendererText()
- column = Gtk.TreeViewColumn("Package", renderer, text=0)
-
- treeview_conflicts.append_column(column)
-
- vbox_package_conflicts_with.pack_start(
- treeview_conflicts, True, True, 0
- )
-
- else:
- lbl_package_conflicts_with_value = Gtk.Label(
- xalign=0, yalign=0
- )
- lbl_package_conflicts_with_value.set_text("None")
-
- vbox_package_conflicts_with.pack_start(
- lbl_package_conflicts_with_value, True, True, 0
- )
-
- listbox.add(expander_conflicts_with)
-
- checkbtn_installed = Gtk.CheckButton(label="Installed")
- checkbtn_installed.set_active(False)
- checkbtn_installed.set_sensitive(False)
-
- # is the package installed
- installed = fn.check_package_installed(term)
-
- if installed is True:
- checkbtn_installed.set_active(True)
-
- # box_outer.pack_start(checkbtn_installed, True, True, 0)
-
- scrolled_window_package_info = Gtk.ScrolledWindow()
- scrolled_window_package_info.set_propagate_natural_height(True)
- scrolled_window_package_info.add(box_outer)
-
- vbox_package_info = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
-
- lbl_padding_vbox = Gtk.Label(xalign=0, yalign=0)
- lbl_padding_vbox.set_text("")
-
- vbox_package_info.pack_start(
- scrolled_window_package_info, True, True, 0
- )
- vbox_package_info.pack_start(lbl_padding_vbox, True, True, 0)
- vbox_package_info.pack_start(checkbtn_installed, True, True, 0)
-
- self.stack.add_titled(
- vbox_package_info,
- "Package Information",
- "Package Information",
- )
-
- # package files
-
- package_files = fn.get_package_files(term)
- if package_files is not None:
- lbl_package_title = Gtk.Label(xalign=0, yalign=0)
- lbl_package_title.set_markup("Package")
-
- lbl_package_title_value = Gtk.Label(xalign=0, yalign=0)
-
- lbl_package_title_value.set_text(package_metadata["name"])
-
- treestore_filelist = Gtk.TreeStore(str, str)
-
- for file in package_files:
- treestore_filelist.append(None, list(file))
-
- treeview_files = Gtk.TreeView(model=treestore_filelist)
-
- renderer = Gtk.CellRendererText()
- column = Gtk.TreeViewColumn("Files", renderer, text=0)
-
- treeview_files.append_column(column)
-
- vbox_package_files = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
-
- vbox_package_files.pack_start(
- lbl_package_title, True, True, 0
- )
- vbox_package_files.pack_start(
- lbl_package_title_value, True, True, 0
- )
-
- lbl_padding_package_files = Gtk.Label(xalign=0, yalign=0)
- lbl_padding_package_files.set_text("")
-
- vbox_package_files.pack_start(
- lbl_padding_package_files, True, True, 0
- )
-
- scrolled_window_package_files = Gtk.ScrolledWindow()
- scrolled_window_package_files.set_propagate_natural_height(
- True
- )
- scrolled_window_package_files.add(treeview_files)
-
- vbox_package_files.pack_start(
- scrolled_window_package_files, True, True, 0
- )
-
- self.stack.add_titled(
- vbox_package_files,
- "Package Files",
- "Package Files",
- )
-
- self.search_package_activated = True
- self.show_all()
-
- else:
- message_dialog = MessageDialog(
- "Info",
- "Search returned 0 results",
- "Failed to find package name",
- "Are the correct pacman mirrorlists configured ?\nOr try to search again using the exact package name",
- "info",
- False,
- )
-
- message_dialog.show_all()
- message_dialog.run()
- message_dialog.hide()
-
- except Exception as e:
- fn.logger.error("Exception in perform_search(): %s" % e)
\ No newline at end of file
diff --git a/usr/share/blackbox/ui/PackagesImportDialog.py b/usr/share/blackbox/ui/PackagesImportDialog.py
deleted file mode 100644
index 3415b7f..0000000
--- a/usr/share/blackbox/ui/PackagesImportDialog.py
+++ /dev/null
@@ -1,223 +0,0 @@
-import os
-import gi
-import Functions as fn
-from queue import Queue
-from ui.MessageDialog import MessageDialog
-
-from gi.repository import Gtk, Gdk, GdkPixbuf, Pango, GLib
-gi.require_version("Gtk", "3.0")
-
-base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
-
-
-class PackagesImportDialog(Gtk.Dialog):
- """create a gui"""
-
- def __init__(self, package_file, packages_list, logfile):
- Gtk.Dialog.__init__(self)
-
- # Create a queue for storing package import messages from pacman
- self.pkg_import_queue = Queue()
-
- # Create a queue for storing package install errors
- self.pkg_err_queue = Queue()
-
- # Create a queue for storing package install status
- self.pkg_status_queue = Queue()
-
- self.package_file = package_file
- self.packages_list = packages_list
- self.logfile = logfile
-
- self.stop_thread = False
-
- self.set_resizable(True)
- self.set_border_width(10)
- self.set_size_request(800, 700)
- self.set_modal(True)
-
- headerbar = Gtk.HeaderBar()
- headerbar.set_title("Import packages")
- headerbar.set_show_close_button(True)
-
- self.set_titlebar(headerbar)
-
- self.set_icon_from_file(os.path.join(base_dir, "images/blackbox.png"))
-
- hbox_title = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
- lbl_packages_title = Gtk.Label(xalign=0)
- lbl_packages_title.set_name("title")
- lbl_packages_title.set_text("Packages")
-
- hbox_title.pack_start(lbl_packages_title, False, False, 0)
-
- hbox_title_install = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
- label_install_title = Gtk.Label(xalign=0)
- label_install_title.set_markup(" Install Packages")
-
- hbox_title_install.pack_start(label_install_title, False, False, 0)
-
- hbox_sep = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
- hsep = Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL)
- hbox_sep.pack_start(hsep, True, True, 0)
-
- frame_install = Gtk.Frame(label="")
- frame_install_label = frame_install.get_label_widget()
- frame_install_label.set_markup("Install Packages")
-
- hbox_install = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
- label_install_desc = Gtk.Label(xalign=0, yalign=0)
- label_install_desc.set_markup(
- f""
- f" WARNING: Proceed with caution this will install packages onto your system!\n"
- f" Packages from the AUR are not supported \n"
- f" This also performs a full system upgrade\n\n"
- f" - A list of packages are sourced from {self.package_file}\n"
- f" - To ignore a package, add a # in front of the package name\n"
- f" - Log file: {self.logfile}\n"
- f" - A reboot is recommended when core Linux packages are installed\n"
- )
-
- self.scrolled_window = Gtk.ScrolledWindow()
-
- self.textview = Gtk.TextView()
- self.textview.set_name("textview_log")
- self.textview.set_property("editable", False)
- self.textview.set_property("monospace", True)
- self.textview.set_border_width(10)
- self.textview.set_vexpand(True)
- self.textview.set_hexpand(True)
-
- msg_buffer = self.textview.get_buffer()
- msg_buffer.insert(
- msg_buffer.get_end_iter(),
- "\n Click Yes to confirm install of the following packages:\n\n",
- )
-
- lbl_title_message = Gtk.Label(xalign=0, yalign=0)
- lbl_title_message.set_markup(
- "There are %s packages to install, proceed ?"
- % len(self.packages_list)
- )
- lbl_padding1 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding1.set_text("")
-
- lbl_padding2 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding2.set_text("")
-
- self.infobar = Gtk.InfoBar()
-
- content = self.infobar.get_content_area()
- content.add(lbl_title_message)
-
- self.infobar.set_revealed(True)
-
- for package in sorted(self.packages_list):
- msg_buffer.insert(msg_buffer.get_end_iter(), " - %s\n" % package)
-
- # move focus away from the textview, to hide the cursor at load
- headerbar.set_property("can-focus", True)
- Gtk.Window.grab_focus(headerbar)
-
- self.scrolled_window.add(self.textview)
-
- self.button_yes = self.add_button("Yes", Gtk.ResponseType.OK)
- self.button_yes.set_size_request(100, 30)
- btn_yes_context = self.button_yes.get_style_context()
- btn_yes_context.add_class("destructive-action")
-
- self.button_no = self.add_button("Close", Gtk.ResponseType.CANCEL)
- self.button_no.set_size_request(100, 30)
-
- self.connect("response", self.on_response)
-
- vbox_log_dir = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
-
- btn_open_log_dir = Gtk.Button(label="Open log directory")
- btn_open_log_dir.connect("clicked", self.on_open_log_dir_clicked)
- btn_open_log_dir.set_size_request(100, 30)
-
- vbox_log_dir.pack_start(btn_open_log_dir, False, False, 0)
-
- grid_message = Gtk.Grid()
-
- grid_message.attach(label_install_desc, 0, 0, 1, 1)
- grid_message.attach(self.infobar, 0, 1, 1, 1)
- grid_message.attach(lbl_padding1, 0, 2, 1, 1)
-
- grid_message.attach(self.scrolled_window, 0, 3, 1, 1)
- grid_message.attach(lbl_padding2, 0, 4, 1, 1)
- grid_message.attach(vbox_log_dir, 0, 5, 1, 1)
-
- self.vbox.add(grid_message)
-
- def on_open_log_dir_clicked(self, widget):
- fn.open_log_dir()
-
- def display_progress(self):
- self.textview.destroy()
- self.infobar.destroy()
- self.button_yes.destroy()
-
- self.label_package_status = Gtk.Label(xalign=0, yalign=0)
- self.label_package_count = Gtk.Label(xalign=0, yalign=0)
-
- label_warning_close = Gtk.Label(xalign=0, yalign=0)
- label_warning_close.set_markup(
- "Do not close this window during package installation"
- )
-
- self.textview = Gtk.TextView()
- self.textview.set_name("textview_log")
- self.textview.set_property("editable", False)
- self.textview.set_property("monospace", True)
- self.textview.set_border_width(10)
- self.textview.set_vexpand(True)
- self.textview.set_hexpand(True)
-
- self.scrolled_window.add(self.textview)
-
- self.msg_buffer = self.textview.get_buffer()
-
- self.vbox.add(label_warning_close)
- self.vbox.add(self.label_package_status)
- self.vbox.add(self.label_package_count)
-
- fn.Thread(
- target=fn.monitor_package_import,
- args=(self,),
- daemon=True,
- ).start()
-
- self.show_all()
-
- fn.logger.info("Installing packages")
- event = "%s [INFO]: Installing packages\n" % fn.datetime.now().strftime(
- "%Y-%m-%d-%H-%M-%S"
- )
-
- fn.logger.info("Log file = %s" % self.logfile)
-
- self.pkg_import_queue.put(event)
-
- # debug install, overrride packages_list
-
- # starts 2 threads one to install the packages, and another to check install status
-
- fn.Thread(
- target=fn.import_packages,
- args=(self,),
- daemon=True,
- ).start()
-
- fn.Thread(target=fn.log_package_status, args=(self,), daemon=True).start()
-
- def on_response(self, dialog, response):
- if response in (Gtk.ResponseType.OK, Gtk.ResponseType.YES):
- self.stop_thread = False
- self.display_progress()
-
- else:
- self.stop_thread = True
- dialog.hide()
- dialog.destroy()
\ No newline at end of file
diff --git a/usr/share/blackbox/ui/PacmanLogWindow.py b/usr/share/blackbox/ui/PacmanLogWindow.py
deleted file mode 100644
index 2c47bf6..0000000
--- a/usr/share/blackbox/ui/PacmanLogWindow.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# This class is used to create a window to monitor the pacman log file inside /var/log/pacman.log
-
-import os
-import gi
-import Functions as fn
-from gi.repository import Gtk, Gdk, GdkPixbuf, Pango, GLib
-
-gi.require_version("Gtk", "3.0")
-
-base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
-# base_dir = os.path.dirname(os.path.realpath(__file__))
-
-
-class PacmanLogWindow(Gtk.Window):
- def __init__(self, textview_pacmanlog, btn_pacmanlog):
- Gtk.Window.__init__(self)
-
- self.start_logtimer = True
- self.textview_pacmanlog = textview_pacmanlog
- self.btn_pacmanlog = btn_pacmanlog
- headerbar = Gtk.HeaderBar()
-
- headerbar.set_show_close_button(True)
-
- self.set_titlebar(headerbar)
-
- self.set_title("BlackBox - Pacman log file viewer")
- self.set_default_size(800, 600)
- self.set_resizable(True)
- self.set_border_width(10)
- self.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
- self.set_icon_from_file(os.path.join(base_dir, "images/blackbox.png"))
- self.connect("delete-event", self.on_close)
-
- btn_pacmanlog_ok = Gtk.Button(label="OK")
- btn_pacmanlog_ok.connect("clicked", self.on_response, "response")
- btn_pacmanlog_ok.set_size_request(100, 30)
- btn_pacmanlog_ok.set_halign(Gtk.Align.END)
-
- pacmanlog_scrolledwindow = Gtk.ScrolledWindow()
- pacmanlog_scrolledwindow.set_size_request(750, 500)
- pacmanlog_scrolledwindow.add(self.textview_pacmanlog)
-
- lbl_padding1 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding1.set_text("")
-
- vbox_pacmanlog = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
-
- vbox_pacmanlog.pack_start(pacmanlog_scrolledwindow, True, True, 0)
- vbox_pacmanlog.pack_start(lbl_padding1, False, False, 0)
- vbox_pacmanlog.pack_start(btn_pacmanlog_ok, False, False, 0)
-
- self.add(vbox_pacmanlog)
-
- def on_close(self, widget, data):
- fn.logger.debug("Closing pacman log monitoring window")
- self.start_logtimer = False
- self.btn_pacmanlog.set_sensitive(True)
-
- self.hide()
- self.destroy()
-
- def on_response(self, widget, response):
- # stop updating the textview
- fn.logger.debug("Closing pacman log monitoring dialog")
- self.start_logtimer = False
- self.btn_pacmanlog.set_sensitive(True)
-
- # self.remove(self)
- self.hide()
- self.destroy()
\ No newline at end of file
diff --git a/usr/share/blackbox/ui/ProgressBarWindow.py b/usr/share/blackbox/ui/ProgressBarWindow.py
deleted file mode 100644
index 610c8d8..0000000
--- a/usr/share/blackbox/ui/ProgressBarWindow.py
+++ /dev/null
@@ -1,87 +0,0 @@
-from gi.repository import Gtk, GLib
-import gi
-
-
-# Since a system can have multiple versions
-# of GTK + installed, we want to make
-# sure that we are importing GTK + 3.
-gi.require_version("Gtk", "3.0")
-
-
-class ProgressBarWindow(Gtk.Window):
- new_value = 0.0
-
- def __init__(self):
- Gtk.Window.__init__(self, title="Progress Bar")
- self.set_border_width(10)
-
- vbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
- self.add(vbox)
-
- # Create a ProgressBar
- self.progressbar = Gtk.ProgressBar()
- vbox.pack_start(self.progressbar, True, True, 0)
-
- # Create CheckButton with labels "Show text",
- # "Activity mode", "Right to Left" respectively
- # button = Gtk.CheckButton(label="Show text")
- # button.connect("toggled", self.on_show_text_toggled)
- # vbox.pack_start(button, True, True, 0)
-
- # button = Gtk.CheckButton(label="Activity mode")
- # button.connect("toggled", self.on_activity_mode_toggled)
- # vbox.pack_start(button, True, True, 0)
-
- # button = Gtk.CheckButton(label="Right to Left")
- # button.connect("toggled", self.on_right_to_left_toggled)
- # vbox.pack_start(button, True, True, 0)
-
- # self.timeout_id = GLib.timeout_add(5000, self.on_timeout, None)
- self.activity_mode = False
-
- def set_text(self, text):
- self.progressbar.set_text(text)
- self.progressbar.set_show_text(True)
-
- def reset_timer(self):
- new_value = 0.0
- self.progressbar.set_fraction(new_value)
-
- def on_activity_mode_toggled(self, button):
- self.activity_mode = button.get_active()
- if self.activity_mode:
- self.progressbar.pulse()
- else:
- self.progressbar.set_fraction(0.0)
-
- def on_right_to_left_toggled(self, button):
- value = button.get_active()
- self.progressbar.set_inverted(value)
-
- def update(self, fraction):
- new_value = self.progressbar.get_fraction() + fraction
- self.progressbar.set_fraction(new_value)
- if new_value >= 1.0:
- return False
- return True
-
- def get_complete(self):
- if self.progressbar.get_fraction() >= 1.0:
- return True
- return False
-
- def on_timeout(self, user_data=0.01):
- """
- Update value on the progress bar
- """
- if self.activity_mode:
- self.progressbar.pulse()
- else:
- new_value = self.progressbar.get_fraction() + user_data
-
- if new_value > 1:
- new_value = 0.0
- return False
-
- self.progressbar.set_fraction(new_value)
- return True
\ No newline at end of file
diff --git a/usr/share/blackbox/ui/ProgressDialog.py b/usr/share/blackbox/ui/ProgressDialog.py
deleted file mode 100644
index 73d42bf..0000000
--- a/usr/share/blackbox/ui/ProgressDialog.py
+++ /dev/null
@@ -1,400 +0,0 @@
-# This class is used to create a modal dialog window showing progress of a package install/uninstall and general package information
-
-import os
-import gi
-import Functions as fn
-from ui.MessageDialog import MessageDialog
-from gi.repository import Gtk, Gdk, GdkPixbuf, Pango, GLib
-
-gi.require_version("Gtk", "3.0")
-
-base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
-# base_dir = os.path.dirname(os.path.realpath(__file__))
-
-
-class ProgressDialog(Gtk.Dialog):
- def __init__(self, action, package, command, package_metadata):
- Gtk.Dialog.__init__(self)
-
- self.package_found = True
- # this gets package information using pacman -Si or pacman -Qi whichever returns output
- # package_metadata = fn.get_package_information(pkg.name)
-
- # if a mirrorlist isn't configured properly, pacman will not be able to query its repository
- # so the following is a condition to make sure the data returned isn't an error
-
- if type(package_metadata) is dict:
- package_progress_dialog_headerbar = Gtk.HeaderBar()
- package_progress_dialog_headerbar.set_show_close_button(True)
- self.set_titlebar(package_progress_dialog_headerbar)
-
- self.connect("delete-event", package_progress_dialog_on_close, self, action)
-
- if action == "install":
- self.set_title("BlackBox - installing package %s" % package.name)
-
- elif action == "uninstall":
- self.set_title("BlackBox - removing package %s" % package.name)
-
- self.btn_package_progress_close = Gtk.Button(label="OK")
- self.btn_package_progress_close.connect(
- "clicked",
- on_package_progress_close_response,
- self,
- )
- self.btn_package_progress_close.set_sensitive(False)
- self.btn_package_progress_close.set_size_request(100, 30)
- self.btn_package_progress_close.set_halign(Gtk.Align.END)
-
- self.set_resizable(True)
- self.set_size_request(850, 700)
- self.set_modal(True)
- self.set_border_width(10)
- self.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
- self.set_icon_from_file(os.path.join(base_dir, "images/blackbox.png"))
-
- lbl_pacman_action_title = Gtk.Label(xalign=0, yalign=0)
- lbl_pacman_action_title.set_text("Running command:")
-
- lbl_pacman_action_value = Gtk.Label(xalign=0, yalign=0)
- lbl_pacman_action_value.set_markup("%s" % command)
-
- stack = Gtk.Stack()
- stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
- stack.set_transition_duration(350)
- stack.set_hhomogeneous(False)
- stack.set_vhomogeneous(False)
-
- stack_switcher = Gtk.StackSwitcher()
- stack_switcher.set_orientation(Gtk.Orientation.HORIZONTAL)
- stack_switcher.set_stack(stack)
- stack_switcher.set_homogeneous(True)
-
- package_progress_grid = Gtk.Grid()
-
- self.infobar = Gtk.InfoBar()
- self.infobar.set_name("infobar_info")
-
- content = self.infobar.get_content_area()
- content.add(lbl_pacman_action_title)
- content.add(lbl_pacman_action_value)
-
- self.infobar.set_revealed(True)
-
- lbl_padding_header1 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding_header1.set_text("")
-
- package_progress_grid.attach(lbl_padding_header1, 0, 1, 1, 1)
- package_progress_grid.attach(self.infobar, 0, 2, 1, 1)
-
- package_progress_grid.set_property("can-focus", True)
- Gtk.Window.grab_focus(package_progress_grid)
-
- lbl_padding1 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding1.set_text("")
-
- lbl_padding2 = Gtk.Label(xalign=0, yalign=0)
- lbl_padding2.set_text("")
- lbl_padding2.set_halign(Gtk.Align.END)
-
- package_progress_grid.attach(lbl_padding1, 0, 3, 1, 1)
-
- package_progress_scrolled_window = Gtk.ScrolledWindow()
- self.package_progress_textview = Gtk.TextView()
- self.package_progress_textview.set_property("editable", False)
- self.package_progress_textview.set_property("monospace", True)
- self.package_progress_textview.set_border_width(10)
- self.package_progress_textview.set_vexpand(True)
- self.package_progress_textview.set_hexpand(True)
- buffer = self.package_progress_textview.get_buffer()
- self.package_progress_textview.set_buffer(buffer)
-
- package_progress_scrolled_window.set_size_request(700, 430)
-
- package_progress_scrolled_window.add(self.package_progress_textview)
- package_progress_grid.attach(package_progress_scrolled_window, 0, 4, 1, 1)
-
- vbox_close = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
-
- vbox_close.pack_start(lbl_padding2, True, True, 0)
- vbox_close.pack_start(self.btn_package_progress_close, True, True, 0)
-
- stack.add_titled(package_progress_grid, "Progress", "Package Progress")
-
- # package information
- box_outer = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
-
- listbox = Gtk.ListBox()
- listbox.set_selection_mode(Gtk.SelectionMode.NONE)
- box_outer.pack_start(listbox, True, True, 0)
-
- # package name
- row_package_title = Gtk.ListBoxRow()
- vbox_package_title = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_title.add(vbox_package_title)
- lbl_package_name_title = Gtk.Label(xalign=0)
- lbl_package_name_title.set_markup("Package Name")
-
- lbl_package_name_value = Gtk.Label(xalign=0)
- lbl_package_name_value.set_text(package_metadata["name"])
- vbox_package_title.pack_start(lbl_package_name_title, True, True, 0)
- vbox_package_title.pack_start(lbl_package_name_value, True, True, 0)
-
- listbox.add(row_package_title)
-
- # repository
-
- row_package_repo = Gtk.ListBoxRow()
- vbox_package_repo = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
- row_package_repo.add(vbox_package_repo)
- lbl_package_repo_title = Gtk.Label(xalign=0)
- lbl_package_repo_title.set_markup("Repository")
-
- lbl_package_repo_value = Gtk.Label(xalign=0)
- lbl_package_repo_value.set_text(package_metadata["repository"])
- vbox_package_repo.pack_start(lbl_package_repo_title, True, True, 0)
- vbox_package_repo.pack_start(lbl_package_repo_value, True, True, 0)
-
- listbox.add(row_package_repo)
-
- # description
-
- row_package_description = Gtk.ListBoxRow()
- vbox_package_description = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_description.add(vbox_package_description)
- lbl_package_description_title = Gtk.Label(xalign=0)
- lbl_package_description_title.set_markup("Description")
-
- lbl_package_description_value = Gtk.Label(xalign=0)
- lbl_package_description_value.set_text(package_metadata["description"])
- vbox_package_description.pack_start(
- lbl_package_description_title, True, True, 0
- )
- vbox_package_description.pack_start(
- lbl_package_description_value, True, True, 0
- )
-
- listbox.add(row_package_description)
-
- # arch
-
- row_package_arch = Gtk.ListBoxRow()
- vbox_package_arch = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
- row_package_arch.add(vbox_package_arch)
- lbl_package_arch_title = Gtk.Label(xalign=0)
- lbl_package_arch_title.set_markup("Architecture")
-
- lbl_package_arch_value = Gtk.Label(xalign=0)
- lbl_package_arch_value.set_text(package_metadata["arch"])
- vbox_package_arch.pack_start(lbl_package_arch_title, True, True, 0)
- vbox_package_arch.pack_start(lbl_package_arch_value, True, True, 0)
-
- listbox.add(row_package_arch)
-
- # url
-
- row_package_url = Gtk.ListBoxRow()
- vbox_package_url = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
- row_package_url.add(vbox_package_url)
- lbl_package_url_title = Gtk.Label(xalign=0)
- lbl_package_url_title.set_markup("URL")
-
- lbl_package_url_value = Gtk.Label(xalign=0)
- lbl_package_url_value.set_markup(
- "%s"
- % (package_metadata["url"], package_metadata["url"])
- )
- vbox_package_url.pack_start(lbl_package_url_title, True, True, 0)
- vbox_package_url.pack_start(lbl_package_url_value, True, True, 0)
-
- listbox.add(row_package_url)
-
- # download size
-
- row_package_size = Gtk.ListBoxRow()
- vbox_package_size = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
- row_package_size.add(vbox_package_size)
- lbl_package_size_title = Gtk.Label(xalign=0)
- lbl_package_size_title.set_markup("Download size")
-
- lbl_package_size_value = Gtk.Label(xalign=0)
- lbl_package_size_value.set_text(package_metadata["download_size"])
- vbox_package_size.pack_start(lbl_package_size_title, True, True, 0)
- vbox_package_size.pack_start(lbl_package_size_value, True, True, 0)
-
- listbox.add(row_package_size)
-
- # installed size
-
- row_package_installed_size = Gtk.ListBoxRow()
- vbox_package_installed_size = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_installed_size.add(vbox_package_installed_size)
- lbl_package_installed_size_title = Gtk.Label(xalign=0)
- lbl_package_installed_size_title.set_markup("Installed size")
-
- lbl_package_installed_size_value = Gtk.Label(xalign=0)
- lbl_package_installed_size_value.set_text(
- package_metadata["installed_size"]
- )
- vbox_package_installed_size.pack_start(
- lbl_package_installed_size_title, True, True, 0
- )
- vbox_package_installed_size.pack_start(
- lbl_package_installed_size_value, True, True, 0
- )
-
- listbox.add(row_package_installed_size)
-
- # build date
-
- row_package_build_date = Gtk.ListBoxRow()
- vbox_package_build_date = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_build_date.add(vbox_package_build_date)
- lbl_package_build_date_title = Gtk.Label(xalign=0)
- lbl_package_build_date_title.set_markup("Build date")
-
- lbl_package_build_date_value = Gtk.Label(xalign=0)
- lbl_package_build_date_value.set_text(package_metadata["build_date"])
- vbox_package_build_date.pack_start(
- lbl_package_build_date_title, True, True, 0
- )
- vbox_package_build_date.pack_start(
- lbl_package_build_date_value, True, True, 0
- )
-
- listbox.add(row_package_build_date)
-
- # packager
-
- row_package_maintainer = Gtk.ListBoxRow()
- vbox_package_maintainer = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_maintainer.add(vbox_package_maintainer)
- lbl_package_maintainer_title = Gtk.Label(xalign=0)
- lbl_package_maintainer_title.set_markup("Packager")
-
- lbl_package_maintainer_value = Gtk.Label(xalign=0)
- lbl_package_maintainer_value.set_text(package_metadata["packager"])
- vbox_package_maintainer.pack_start(
- lbl_package_maintainer_title, True, True, 0
- )
- vbox_package_maintainer.pack_start(
- lbl_package_maintainer_value, True, True, 0
- )
-
- listbox.add(row_package_maintainer)
-
- # depends on
-
- expander_depends_on = Gtk.Expander()
- expander_depends_on.set_use_markup(True)
- expander_depends_on.set_resize_toplevel(True)
- expander_depends_on.set_label("Depends on")
-
- row_package_depends_on = Gtk.ListBoxRow()
- expander_depends_on.add(row_package_depends_on)
- vbox_package_depends_on = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_depends_on.add(vbox_package_depends_on)
-
- if len(package_metadata["depends_on"]) > 0:
- treestore_depends = Gtk.TreeStore(str, str)
-
- for item in package_metadata["depends_on"]:
- treestore_depends.append(None, list(item))
-
- treeview_depends = Gtk.TreeView(model=treestore_depends)
-
- renderer = Gtk.CellRendererText()
- column = Gtk.TreeViewColumn("Package", renderer, text=0)
-
- treeview_depends.append_column(column)
-
- vbox_package_depends_on.pack_start(treeview_depends, True, True, 0)
-
- else:
- lbl_package_depends_value = Gtk.Label(xalign=0, yalign=0)
- lbl_package_depends_value.set_text("None")
-
- vbox_package_depends_on.pack_start(
- lbl_package_depends_value, True, True, 0
- )
-
- listbox.add(expander_depends_on)
-
- # conflicts with
-
- expander_conflicts_with = Gtk.Expander()
- expander_conflicts_with.set_use_markup(True)
- expander_conflicts_with.set_resize_toplevel(True)
- expander_conflicts_with.set_label("Conflicts with")
-
- row_package_conflicts_with = Gtk.ListBoxRow()
- expander_conflicts_with.add(row_package_conflicts_with)
- vbox_package_conflicts_with = Gtk.Box(
- orientation=Gtk.Orientation.VERTICAL, spacing=0
- )
- row_package_conflicts_with.add(vbox_package_conflicts_with)
-
- if len(package_metadata["conflicts_with"]) > 0:
- treestore_conflicts = Gtk.TreeStore(str, str)
-
- for item in package_metadata["conflicts_with"]:
- treestore_conflicts.append(None, list(item))
-
- treeview_conflicts = Gtk.TreeView(model=treestore_conflicts)
-
- renderer = Gtk.CellRendererText()
- column = Gtk.TreeViewColumn("Package", renderer, text=0)
-
- treeview_conflicts.append_column(column)
-
- vbox_package_conflicts_with.pack_start(
- treeview_conflicts, True, True, 0
- )
-
- else:
- lbl_package_conflicts_with_value = Gtk.Label(xalign=0, yalign=0)
- lbl_package_conflicts_with_value.set_text("None")
-
- vbox_package_conflicts_with.pack_start(
- lbl_package_conflicts_with_value, True, True, 0
- )
-
- listbox.add(expander_conflicts_with)
-
- package_metadata_scrolled_window = Gtk.ScrolledWindow()
-
- package_metadata_scrolled_window.add(box_outer)
-
- stack.add_titled(
- package_metadata_scrolled_window, "Package Information", "Information"
- )
-
- self.vbox.add(stack_switcher)
- self.vbox.add(stack)
- self.vbox.add(vbox_close)
-
-
-def on_package_progress_close_response(self, widget):
- self.pkg_dialog_closed = True
- fn.logger.debug("Closing package progress dialog")
- widget.hide()
- widget.destroy()
-
-
-def package_progress_dialog_on_close(widget, data, self, action):
- self.pkg_dialog_closed = True
- fn.logger.debug("Closing package progress dialog")
- widget.hide()
- widget.destroy()
\ No newline at end of file
diff --git a/usr/share/blackbox/ui/SplashScreen.py b/usr/share/blackbox/ui/SplashScreen.py
deleted file mode 100644
index f2ad00d..0000000
--- a/usr/share/blackbox/ui/SplashScreen.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import gi
-from Functions import os
-
-gi.require_version("Gtk", "3.0")
-from gi.repository import Gtk, GdkPixbuf, Gdk # noqa
-
-base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
-# base_dir = os.path.dirname(os.path.realpath(__file__))
-
-
-class SplashScreen(Gtk.Window):
- def __init__(self):
- Gtk.Window.__init__(self, Gtk.WindowType.POPUP, title="")
- self.set_decorated(False)
- self.set_resizable(False)
- self.set_size_request(600, 400)
- self.set_position(Gtk.WindowPosition.CENTER)
-
- main_vbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=1)
- self.add(main_vbox)
-
- self.image = Gtk.Image()
- pimage = GdkPixbuf.Pixbuf().new_from_file_at_size(
- base_dir + "/images/splash.png", 600, 400
- )
- self.image.set_from_pixbuf(pimage)
-
- main_vbox.pack_start(self.image, True, True, 0)
-
- self.show_all()
diff --git a/usr/share/blackbox/yaml/netinstall-fonts.yaml b/usr/share/blackbox/yaml/netinstall-fonts.yaml
deleted file mode 100644
index 7e9d194..0000000
--- a/usr/share/blackbox/yaml/netinstall-fonts.yaml
+++ /dev/null
@@ -1,55 +0,0 @@
-- name: "Fonts"
- description: "Fonts"
- critical: false
- hidden: false
- selected: false
- expanded: true
- packages:
- - adobe-source-code-pro-fonts
- - adobe-source-sans-fonts
- - adobe-source-serif-fonts
- - awesome-terminal-fonts
- - libertinus-font
- - lohit-fonts
- - nerd-fonts-source-code-pro
- - noto-fonts
- - noto-fonts-emoji
- - ttf-anonymous-pro
- - ttf-bitstream-vera
- - ttf-caladea
- - ttf-carlito
- - ttf-cascadia-code
- - ttf-cormorant
- - ttf-croscore
- - ttf-dejavu
- - ttf-droid
- - ttf-eurof
- - ttf-fantasque-sans-mono
- - ttf-fira-code
- - ttf-fira-mono
- - ttf-fira-sans
- - ttf-font-awesome
- - ttf-hack
- - ttf-hactor
- - ttf-hellvetica
- - ttf-ibm-plex
- - ttf-inconsolata
- - ttf-iosevka-nerd
- - ttf-jetbrains-mono
- - ttf-jetbrains-mono-nerd
- - ttf-joypixels
- - ttf-lato
- - ttf-liberation
- - ttf-linux-libertine
- - ttf-linux-libertine-g
- - ttf-meslo-nerd-font-powerlevel10k
- - ttf-mac-fonts
- - ttf-monofur
- - ttf-ms-fonts
- - ttf-nerd-fonts-symbols
- - ttf-nerd-fonts-symbols-mono
- - ttf-opensans
- - ttf-proggy-clean
- - ttf-roboto
- - ttf-roboto-mono
- - ttf-ubuntu-font-family
\ No newline at end of file
diff --git a/usr/share/icons/hicolor/scalable/apps/blackbox.svg b/usr/share/icons/hicolor/scalable/apps/blackbox.svg
deleted file mode 100644
index be8bd6a..0000000
--- a/usr/share/icons/hicolor/scalable/apps/blackbox.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
diff --git a/usr/share/polkit-1/org.snigdhaos.blackbox.policy b/usr/share/polkit-1/org.snigdhaos.blackbox.policy
deleted file mode 100644
index 6a232ba..0000000
--- a/usr/share/polkit-1/org.snigdhaos.blackbox.policy
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
- Snigdha OS
- http://snigdhaos.org/
- package-x-generic
-
- Change your own user data
- Authentication is required to change your own user data
-
- auth_admin
- auth_admin
- auth_admin
-
- /usr/share/blackbox/blackbox.py
- true
-
-
\ No newline at end of file