From 2227842dfc5734be6f2dac47eba3a02f1936cac6 Mon Sep 17 00:00:00 2001 From: Leonardo Robol Date: Sun, 20 Sep 2009 09:59:35 +0200 Subject: [PATCH] Modificata la grafica per usare tanti HBox e VBox invece della gtk.Table che (oltre ad essere orribile) era un tantino illeggibile --- DrPrint | 12 +++++++ DrPrintBackend.py | 15 +++++++-- DrPrintGui/Input.py | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ DrPrintGui/Input.pyc | Bin 4270 -> 6752 bytes DrPrintGui/MainWin.py | 87 ++++++++++++----------------------------------- DrPrintGui/MainWin.pyc | Bin 4119 -> 3168 bytes 6 files changed, 137 insertions(+), 67 deletions(-) diff --git a/DrPrint b/DrPrint index 4eed144..ce877e4 100755 --- a/DrPrint +++ b/DrPrint @@ -6,10 +6,22 @@ from DrPrintBackend import Backend if __name__ == "__main__": + + ## Load the Backend that will perform + ## all the hard work without being seen + ## by the end user. That is -- the sad + ## story of every backend. backend = Backend() + ## ...and then the main win! The one + ## that will try to attract end user + ## with her .. ( find a good word ) + ## P.S.: We give her a backend, without + ## it she will be useless. mw = MainWin(backend) + ## Show all :) mw.show() + ## ..and let's go! gtk.main() diff --git a/DrPrintBackend.py b/DrPrintBackend.py index 5714359..787c6bb 100644 --- a/DrPrintBackend.py +++ b/DrPrintBackend.py @@ -1,5 +1,5 @@ ## Some useful function to help DrPrint to -## print +# -*- coding: utf-8 -*- import paramiko @@ -25,8 +25,19 @@ class Backend(): print "Printing %s" % filename f = open(filename, 'r') + + # Questo รจ inevitabile.. :) + cmd = "lpr -P%s " % printer + + cmd_opts = "" + + if not page_per_page == 1: + cmd_opts += "number-up=%s " % str(page_per_page) + + if not cmd_opts == "": + cmd = cmd + "-o %s" % cmd_opts - channel.exec_command("lpr -P%s" % printer) + channel.exec_command(cmd) channel.sendall( f.read() ) f.close() channel.close() diff --git a/DrPrintGui/Input.py b/DrPrintGui/Input.py index 806416a..6bda858 100644 --- a/DrPrintGui/Input.py +++ b/DrPrintGui/Input.py @@ -20,6 +20,44 @@ class PasswordField(gtk.Entry): self.set_text ("Password") self.set_visibility(False) +class AuthBlock(gtk.HBox): + + def __init__(self, default_spacing): + + gtk.HBox.__init__(self) + + self.user_field = UsernameField() + self.password_field = PasswordField() + + vbox1 = gtk.VBox() + vbox2 = gtk.VBox() + + label = gtk.Label("Utente") + vbox1.pack_start( label ) + label.show() + + label = gtk.Label("Password") + vbox1.pack_start( label ) + label.show() + + vbox2.pack_start(self.user_field) + vbox2.pack_start(self.password_field) + + self.user_field.show() + self.password_field.show() + + self.pack_start(vbox1) + self.pack_start(vbox2) + + vbox1.show() + vbox2.show() + + def get_username(self): + return self.user_field.get_text() + + def get_password(self): + return self.password_field.get_text() + class PrintButton(gtk.Button): def __init__(self, parent=None): @@ -93,3 +131,55 @@ class PagePerPageComboBox(gtk.HBox): def get_page_per_page(self): return self.combobox.get_active_text() + +class PrinterSettingsBlock(gtk.HBox): + + def __init__(self, default_spacing = 5): + + gtk.HBox.__init__(self) + + vbox1 = gtk.VBox(False, default_spacing) + vbox2 = gtk.VBox(False, default_spacing) + + self.set_spacing(default_spacing) + + label = gtk.Label("Stampante") + vbox1.pack_start(label) + label.show() + + self.printer_chooser = PrinterComboBox() + vbox2.pack_start( self.printer_chooser ) + self.printer_chooser.show() + + label = gtk.Label("File") + vbox1.pack_start( label ) + label.show() + + self.select_file_widget = SelectFileWidget() + vbox2.pack_start (self.select_file_widget) + self.select_file_widget.show() + + label = gtk.Label("Pagine per foglio") + vbox1.pack_start(label) + label.show() + + self.page_per_page = PagePerPageComboBox() + vbox2.pack_start(self.page_per_page) + self.page_per_page.show() + + self.pack_start(vbox1) + self.pack_start(vbox2) + + vbox1.show() + vbox2.show() + + def get_filename(self): + return self.select_file_widget.GetFile() + + def get_printer(self): + return self.printer_chooser.get_printer() + + def get_page_per_page(self): + return self.page_per_page.get_page_per_page() + + diff --git a/DrPrintGui/Input.pyc b/DrPrintGui/Input.pyc index 88c35e8b194b3727948eb877deb2d900acd2cf8d..07ceccc7ec4a040f778e8301b29726d6537e115e 100644 GIT binary patch delta 2042 zcmaJ>&2Jk;6rb7kuD#B#?YJ$88z`;_sRe@Y5k3l}A5NP@Z7J0lA;@LxdNy@BS;Y#OlBdr;;`$lM`0@vE_2*UOHR!jOZe51{#2Do{xz4PiwdrfOC0##?Tr(UPzN*M7R z1TzYT%UwP4+~Zjzkp*5bJnrd{Vf&c`!!{qdOr0RKdo|B z(>jL5#r;pMbKDXI=;~*?!prKu{X$wC!CXA0ew+A!FRNbq0e?~TGCrSGe`NaB2^c?A z8_tR|OKyWqYjamIds1c;Cl)9(>p0YN`~9rVc|m~8X|`Xc`< zU(_*gAST#<-<#sIlx}j`w@Eumg6>7UOJWRbN8QVB;Bv1qcu z)Jlp4DXmyc)byi8RDlhGv8a@(AC@rUt6cq^o$jGhchT3zu;tP0qZN}V0`cTPtf71H zAr?rFvp^BYqOpzG9jL@r^jD_S`d7 zozGX8#|sd|KSf?NyaDgHya3ioIOzX6F;c=t_6i{`pvf=hUx9iDV~mFEWil^n^CHy! zN6f2au9A74TH(h7bA{+eJVHyfgCHElpzEfn+`q(#$rJy{RCwg l1re3LMt#Zp(!>%#&Z}<<#lyq}vqs6mf3B1+l}p9a$rYUGlWRCQH^1O?VB{=e0UF@plwUDfms^8TaB>*8 zmP82`P^=&^IXk|%B(bOjtfV+2zkKpWaSv9IdWFf?x&JfDPrl9*&nPz8oVSHl5-6%S z`2epwkk88=!OafjyQh}8W#*(#7T{3e2FV9$0tpR<$rHI9S%rX1xy@Jj*ccf_Cg0}w zVU(J@f!&`i2xPj$xbU`dV z5TOqu3_t{ufkBfsgx%S|@`jVwiF-}nFD%9w2R7Lps1)KPVPhaO0Eml0ZeU~LCome usare questo programma:\n\ -1) Inserire nome utente e password - 2) Scegliere il file da stampare e la\ - stampante - 3) Premere il tasto stampa") +1) Inserire nome utente e password \n2) Scegliere il file da stampare e la\ + stampante \n3) Premere il tasto stampa") - layout_box.attach(label, 0, 7, 0, 1) + layout_box.pack_start( label ) label.show() - # The authentication Input (riga 1) - for j in range(0, 8): - layout_box.set_row_spacing( j , self.default_spacing ) - - for j in range(0,2): - layout_box.set_col_spacing( j , self.default_spacing ) - - ## Un po' di spazio fra la spiegazione e la sostanza - layout_box.set_row_spacing(0, 20) - - layout_box.set_homogeneous(False) - label = gtk.Label() - label.set_markup("Autenticazione") - layout_box.attach( label, 0, 2, 1, 2 ) - label.show() - - label = gtk.Label("Utente") - layout_box.attach( label, 0 , 1, 2 , 3) + label.set_markup("Autenticazione (sui computer dell'Aula 4)") + layout_box.pack_start( label ) label.show() - self.user_field = UsernameField() - layout_box.attach( self.user_field, 1, 3, 2 , 3) - self.user_field.show() - - label = gtk.Label("Password") - layout_box.attach( label, 0, 1, 3, 4) - label.show() + self.auth_block = AuthBlock(self.default_spacing) + layout_box.pack_start ( self.auth_block ) + self.auth_block.show() - self.password_field = PasswordField() - layout_box.attach(self.password_field, 1, 3, 3, 4) - self.password_field.show() - - # The PDF file loading and print settings label = gtk.Label() label.set_markup("Configurazione stampante") - layout_box.attach(label, 0, 2, 4, 5) + layout_box.pack_start(label) label.show() - label = gtk.Label("Stampante") - layout_box.attach(label, 0, 1, 5, 6) - label.show() - - self.printer_chooser = PrinterComboBox() - layout_box.attach( self.printer_chooser, 1, 3, 5, 6) - self.printer_chooser.show() - - label = gtk.Label("File") - layout_box.attach(label, 0, 1, 7, 8) - label.show() - - self.select_file_widget = SelectFileWidget() - layout_box.attach( self.select_file_widget, 1, 3, 7, 8) - self.select_file_widget.show() + self.printer_settings_block = PrinterSettingsBlock(self.default_spacing) + layout_box.pack_start(self.printer_settings_block) + self.printer_settings_block.show() self.print_button = PrintButton() - layout_box.attach(self.print_button, 2, 3, 8, 9) + layout_box.pack_start(self.print_button) self.print_button.show() - label = gtk.Label("Pagine per foglio") - layout_box.attach(label, 0, 1, 6, 7) - label.show() - - self.page_per_page = PagePerPageComboBox() - layout_box.attach(self.page_per_page, 1, 3, 6, 7) - self.page_per_page.show() - + self.add (layout_box) layout_box.show() @@ -124,11 +81,11 @@ class MainWin(gtk.Window): def print_button_clicked_callback(self, widget): if not self.backend == None: - printer = self.printer_chooser.get_printer() - username = self.user_field.get_text() - password = self.password_field.get_text() - filename = self.select_file_widget.GetFile() - page_per_page = self.page_per_page.get_page_per_page() + printer = self.printer_settings_block.get_printer() + username = self.auth_block.get_username() + password = self.auth_block.get_password() + filename = self.printer_settings_block.get_filename() + page_per_page = self.printer_settings_block.get_page_per_page() self.backend.send_print(printer = printer, username = username, diff --git a/DrPrintGui/MainWin.pyc b/DrPrintGui/MainWin.pyc index 2f300560170474307f0d57edda664b10c3d1e0d9..de3f044030c1b27177ce3cea24f6ea6e3f1e7f99 100644 GIT binary patch delta 1207 zcmZ`(%}>-&5Pz@Ter~(Vq9L%LE(&1@2qJJW667OBMT6#%Xf)BLYzs6j+fDm65Cb6* zZ=UcSym|KI#punmXa5294=^6Q87|JWyDJ)L^QLcp^P73|W+r`A`qth1`KN8Z{Q7>W zLYj{X-#J+EgTvmL9_nR?Pf4JWHA*~%JSXIUkcW@-!)KFMWuS2b#C(HqEL6kFCO-|@ zy(p-0KU(oQ4{GaiYRI+>3k}Z0+Pg9OgHlDDkr$~hT)BTAgGsO!Va3Z7A`=o&JZ+DX zT}VM9yMV~#fD($fOkx96B7s6Ypn?I3Dnf|@77bbd<2NZS{{BA>`k&L_SjR|GfXHyL zkp@q8C&y0{Jt-ga@9-vZV@rR98y}vNbe6_Tq!GJ zL}OC?M!eRBjG5KhiQ$>?)miaL>o-kMFQ@8vZ7fkIQ}wLgJsn?yo&W>d?ALfuai0cZ z%`cVXMo_ARTXle=lIK^eL-UQQTbfEeU+4qF%jG<{GMp)%0dapJ+~GJ1vCo~j?p9zx zm<75x(u=oE*Z{Wa#N3T|;t+3y+YDgB(dfdQIjcBm3Nw1e7!AJf2wnD}Kb zsYUQ)wz!oYp#_{`r2~Mw;$xOgWN-wbU3;0N$*m#WQ(CH?Skqy`DH3zm2sK63y57lc z2vc|0eW&h64sOH;>xqLUV+x3*D9ccN)`J@2>rl#O5m+~ZSWg5Su^-jkEx!%a-8kM3 zBd-mt1yvszV#A&uETAuTYCG`2ot0qA`cYu5*aZ{=$yLwcR+u>kSAU$lql|*?i?_Ke z#X+>_D3ZQoO<2Mn6*PZy9Q%-i6=RAjl-w#97Y*4sRmQ(a(qhNKCWn#ZFjeg2hg1zL OOa}KG;wWE~`sCjsBkfB7 literal 4119 zcmb_f-EQ2*6&`X|EA3iqNmgXpMT-&znyiDyij(%HHH6f5>^g82fpV&Jfr8+Yv(i{x za!n3l*|4sZ2WT(an?6S$qK}XNc}ZNfx0Wr?C|jX&39(bIs5m24hP5o_}f>B zYCb)De}PdMOsP_1%$`bpb>yir7H;jUu`lb6I_jvbtHxcGEvWH=%6e+tQ`w>#FRE-w zjh9r`SL43&(yr2;G6OY*iUswZQm0D&eteC(_eL~Z{Rq=DUF30@7C~4{iY&OF>Eer$ z%e%&In}6Z6Bg}RP=5H!p=J8BFHabg%vKv>`tD;ODChlij=az*jJ{*N3Of-)Cc(P^#Z8|wtaQ#fht_lqEMIU5heN}LB;_?zOycB7=c%R72lmJ^+`up`UfCrq zqsZjOMv=r~|LM-7ulJ+pU++Hq@^@c8vwbjB+D6vcOiKv)G(nJc8ND*8JruE2PvbhX zQ8kYflOKp5Ns;G(PgKkhw&-PTtfiZi+Tg@+7Y$DoXW59b+OF8krXf8WVYsRK6sxVn zVy3rnCgqH7Rb{f(pwNClsm)dsyu0()AuX(7R6Kgh@B26XzBk18xX!1dJ@XN z03Zt_+lz(>Au6ZJKkf6oM%;p6%o2_r>641QanxV~GWN)vPyFKYml(efNlK2i9S;PX4dZmDMtzl~|x zakDpI>cGSlhTMUP$yZW&cdsyUC zb5NH~tg#4>sKAvNqO~V(gN$<4ByHC8ipdrw+vM21E>SqK<6>uY8{|+>X7+y`Pf$v@ zdKOP~W|@CkRAzB`RL{lB*xEQbbj9EhWs1yYoTFi2zd&XLt}QkpX=g7G!}i4)4Rxb9 z(77(^N>n|Lvr31MQewPD^r9)dn2>zLZuHFTZ`Q8#Bp1NP*wC?FOJkT>wQlFkO~ znPy#ttDzJ$R$&o}Cej9l+>3NebM!V5V2Zeq;vA>xh?YVIQe4a8*G0{Gdn}G;0vMfq z@xHZ@KK}%xDlw^rTb*UE=P&xVy+LPH^}J1A=FX}=^q0M%2fDu^^Ro9t)X)p-?tgg? z`709s&`Y=p4g&ZPLmDrp0Q^e<<{HU}{S!MMg1O`Rip-#&Nk^0n?{H#yx9ndp0v#oe zFG|o{umu{?oIv}&*s(!_3=T1xz~Yz--R5A zyJj9b7Z+JcVyXN=YA>%>gDV9UVgo*KGW=Z_f8f!`TPGG78Eig+&YoB)~{Q5JhQ`L{az) zypmo#WYP(FdqVCyq}p@WWc9x_`V14ZcExN9%>3oG{