Changeset 3832


Ignore:
Timestamp:
Mar 7, 2017, 3:00:28 PM (2 years ago)
Author:
daduve
Message:

new methods to deb

Location:
lliurex-remote-installer/trunk/fuentes/lliurex-remote-installer-gui.install/usr/share/lliurex-remote-installer
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • lliurex-remote-installer/trunk/fuentes/lliurex-remote-installer-gui.install/usr/share/lliurex-remote-installer/AptBox.py

    r3709 r3832  
    125125               
    126126                if not manage_dialog:
    127                         return self.current_var != self.var
    128                        
    129                 if self.current_var != self.var:
     127                        if self.current_var==None:
     128                                return False
     129                        return self.current_var != self.core.var
     130               
     131               
     132                if self.current_var!=None and self.current_var != self.core.var:
    130133                        if not self.changes_detected_dialog(False):
    131134                                return True
    132                         else:
    133                                 sys.exit(0)
     135               
     136                sys.exit(0)
    134137                       
    135138
     
    143146                        self.list_box.remove(x)
    144147               
    145                 self.var=info
     148                self.core.var=info
    146149               
    147150                times=1
    148151               
    149152                for t in range(0,times):
    150                         for x in self.var["apt"]:
     153                        for x in self.core.var["apt"]:
    151154                                self.new_apt_button(x)
    152155                       
     156                self.current_var=copy.deepcopy(self.core.var)
    153157                self.list_box.show_all()
    154158               
     
    212216               
    213217                if not ignore_changes:
    214                
     218                       
    215219                        if self.current_var!=None:
    216220                                if self.check_changes():
     
    219223                       
    220224                        if apt_id !=self.current_id:
    221                                 self.current_var=copy.deepcopy(self.var)
    222                        
     225                                self.current_var=copy.deepcopy(self.core.var)
     226                               
    223227                self.current_id=apt_id
    224228               
     
    247251                                if apt.get_tooltip_text() not in self.current_var["apt"]:
    248252                                        self.list_box.remove(apt)
     253                       
    249254               
    250255               
     
    255260       
    256261        def add_apt_button_clicked(self,widget):
    257                
    258262               
    259263                self.apt_name_entry.set_text("")
     
    267271        def delete_apt_button_clicked(self,widget):
    268272               
    269                
    270273                if self.current_id==None:
    271274                        return
    272275               
    273276                if self.delete_apt_dialog(self.current_id):
    274                         for apt in self.list_box.get_children():
    275                                
    276                                 if apt.get_children()[0].get_text() == self.current_id:
    277                                         self.list_box.remove(apt)
     277                        for apt_button in self.list_box.get_children():
     278                               
     279                                if apt_button.get_tooltip_text() == self.current_id:
     280                                        self.list_box.remove(apt_button)
    278281                                        self.stack.set_visible_child_name("empty")
    279                                         self.var["apt"].pop(self.current_id)
     282                                        self.core.var["apt"].pop(self.current_id)
    280283                                        self.current_id=None
    281284                                        self.current_var=None
     285                                        self.core.n4d.set_variable(self.core.var)
    282286               
    283287        #def add_button_clicked
    284288       
    285289        def accept_apt_button_clicked(self,widget):
     290               
    286291               
    287292                name=self.apt_name_entry.get_text()
     
    291296                        self.apt_msg_label.set_markup("<span foreground='red'>"+"Invalid values"+"</span>")
    292297                        return
    293                 if name in self.var["apt"]:
     298                if name in self.core.var["apt"]:
    294299                        self.apt_msg_label.set_markup("<span foreground='red'>"+"Apt name already exists"+"</span>")
    295300                        return
    296301               
    297                 if len(name) > 0 and len(source)>0 and name not in self.var:
     302                if len(name) > 0 and len(source)>0 and name not in self.core.var:
     303                        name=(name.lower())
    298304                        b=self.new_apt_button(name)
    299305                       
    300306                        if self.current_var ==None:
    301                                 self.current_var=copy.deepcopy(self.var)
     307                                self.current_var=copy.deepcopy(self.core.var)
    302308                               
    303309                        self.current_var["apt"][name]={}
     
    305311                        self.current_var["apt"][name]["url"]=source
    306312                        self.new_apt_window.hide()
     313                       
     314                        self.core.var=copy.deepcopy(self.current_var)
     315                        self.core.n4d.set_variable(self.core.var)
    307316                       
    308317                        self.apt_clicked(b,name,True)
     
    396405                main_window=self.core.lri.main_window
    397406                dialog=Dialog.ApplyingChangesDialog(main_window)
    398                 GLib.timeout_add(1000,self.check_apply_thread,dialog)
     407                dialog.show()
     408                GLib.timeout_add(500,self.check_apply_thread,dialog)
    399409               
    400410        #def apply_changes_button_clicked
     
    403413        def apply_changes_thread(self):
    404414               
    405                 self.core.dprint("Applying changes...")
    406                
    407                 # SAMPLE CODE
    408                 time.sleep(2.5)
    409                 # ######### #
    410                
    411                 self.var=copy.deepcopy(self.current_var)
    412                 self.core.dprint("Done")
    413        
    414                 # store return value here
    415                
    416                 self.thread_ret={"status":True,"msg":"SE HA ROTO"}
     415                try:
     416                        self.core.dprint("Applying changes...")
     417               
     418                        # SAMPLE CODE
     419                       
     420                        #self.core.n4d.lliurex_version()
     421                        print "testeando....."
     422                        #time.sleep(1.5)
     423                        # ######### #
     424                       
     425                        self.core.var=copy.deepcopy(self.current_var)
     426                        self.test_apt=self.core.n4d.test_apt_list(self.core.var)
     427                        self.thread_ret={"status":True,"msg":"SE HA ROTO"}
     428       
     429                        # store return value here
     430                       
     431                       
     432                       
     433                except Exception as e:
     434                        print e
     435                        return False
    417436               
    418437               
     
    423442               
    424443                if self.thread.is_alive():
    425                         if not dialog.is_active():
    426                                 dialog.run()
    427                                 dialog.destroy()
    428                                 return False
    429                        
    430444                        return True
    431445               
    432                 if dialog.is_active():
    433                         dialog.destroy()
    434                
    435                
    436                
    437                 self.thread.join()
    438446                dialog.destroy()
     447               
     448               
     449                if self.test_apt[0]:
     450                        if self.test_apt[3] not in [None,"","[]"]:
     451                                if self.delete_test_apt_dialog(self.test_apt[3]):
     452                                        self.core.n4d.set_variable(self.test_apt[1])
     453                                        self.core.var=copy.deepcopy(self.test_apt[1])
     454                                        self.current_var=copy.deepcopy(self.test_apt[1])
     455                                else:
     456                                        self.core.n4d.set_variable(self.core.var)
     457                        self.core.dprint("Done")
     458                else:
     459                        self.core.dprint("Error en el test, no se guarda la variable")
     460               
     461               
     462                for b in self.list_box:
     463                        if b.get_tooltip_text()==self.current_id:
     464                                break
     465               
     466               
     467                self.apt_clicked(b,self.current_id)
     468               
     469               
    439470               
    440471                if not self.thread_ret["status"]:
     
    470501        #def delete_package_dialog
    471502       
     503        def delete_test_apt_dialog(self,pkg_name_orig):
     504               
     505                main_window=self.core.lri.main_window
     506                pkg_name='\n'.join(pkg_name_orig)
     507                dialog=Dialog.QuestionDialog(main_window,"Delete apt list","This pakage list is unavaiable from your repos:\n%s\nDo you want delete it?"%pkg_name)
     508                response=dialog.run()
     509                dialog.destroy()
     510               
     511                if response== Gtk.ResponseType.OK:
     512                        return True
     513               
     514                return False
     515               
     516        #def delete_package_dialog
     517       
    472518        def delete_package_dialog(self,pkg_name):
    473519               
  • lliurex-remote-installer/trunk/fuentes/lliurex-remote-installer-gui.install/usr/share/lliurex-remote-installer/Core.py

    r3705 r3832  
    11import LliurexRemoteInstaller
    22import AptBox
     3import DebBox
    34import N4dManager
    45
     
    2122               
    2223                self.dprint("Init...")
     24                self.var=None
    2325               
    2426        #def __init__
     
    2830                self.dprint("Creating N4D client...")
    2931                self.n4d=N4dManager.N4dManager()
    30                 print self.n4d.lliurex_version()
     32               
    3133               
    3234                self.dprint("Creating AptBox...")
    3335                self.apt_box=AptBox.AptBox()
    3436               
     37                self.dprint("Creating DebBox...")
     38                self.deb_box=DebBox.DebBox()
    3539               
     40                # ####
    3641               
    37                
     42                # #########
    3843               
    3944                # Main window must be the last one
  • lliurex-remote-installer/trunk/fuentes/lliurex-remote-installer-gui.install/usr/share/lliurex-remote-installer/Dialog.py

    r3705 r3832  
    1212                hbox=Gtk.HBox()
    1313                label = Gtk.Label(question)
     14                label.set_margin_bottom(20)
    1415                image=Gtk.Image.new_from_icon_name("dialog-warning",Gtk.IconSize.DIALOG)
    1516                hbox.pack_start(image,True,True,5)
     
    6667               
    6768        #def init
     69       
     70       
     71       
     72       
     73       
     74class FileDialog(Gtk.FileChooserDialog):
     75       
     76        def __init__(self,parent,title="Please choose a file"):
     77               
     78                Gtk.FileChooserDialog.__init__(self,title, parent, Gtk.FileChooserAction.OPEN,(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
     79               
     80        #def init
  • lliurex-remote-installer/trunk/fuentes/lliurex-remote-installer-gui.install/usr/share/lliurex-remote-installer/LliurexRemoteInstaller.py

    r3705 r3832  
    1515RSRC="./"
    1616
     17
     18
    1719class LliurexRemoteInstaller:
     20       
     21       
     22        #VALORES DE LOS DICCIONARIOS
     23        DEB='deb'
     24        APT='apt'
     25        SH='sh'
     26        LIST='lista'
     27        URL='url'
    1828       
    1929        def __init__(self):
     
    4555                self.apt_box=self.core.apt_box
    4656                self.stack.add_titled(self.apt_box,"apt","Apt")
    47                 self.stack.add_titled(Gtk.Label("DEBS"),"debs","Debs")
     57                self.deb_box=self.core.deb_box
     58                self.stack.add_titled(self.deb_box,"debs","Debs")
    4859                self.stack.add_titled(Gtk.Label("EXECUTABLES"),"exes","Executables")
    4960               
     
    6071        def load_values(self):
    6172               
    62                 #DUMMY DATA
    63                
     73                var_init=self.core.n4d.get_variable()
     74                if var_init[0]:
     75                        variable=var_init[1]
     76                else:
     77                        pass
     78                        # #### LA VARIABLE NO EXISTE DEBEMOS DE INCIALIZARLA INICIALMENTE PARA QUE NO DE ERROR, AUNQUE CREO QUE ESO YA LO HACE LA API.
     79               
     80                var={}
     81                var=variable
     82                #var[self.APT]={}
     83                #var[self.APT]=variable[self.APT]
     84               
     85                '''#DUMMY DATA
     86                var=
    6487                var={}
    6588                var["apt"]={}
     
    79102                i["url"]="http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse"
    80103                i["packages"]=[]
     104               
    81105                for x in range(10,21):
    82106                        i["packages"].append("Package %s"%x)
    83107                       
    84108                var["apt"]["Ubuntu"]=i
    85                
     109                '''
     110               
     111                self.core.n4d.test_var()
    86112                self.apt_box.set_info(var)
     113                self.deb_box.set_info(var)
    87114               
    88115               
     
    120147       
    121148        def apt_button_clicked(self,widget):
    122 
    123                 self.stack.set_visible_child_name("apt")
    124                 self.apt_button.set_name("SELECTED_OPTION_BUTTON")
    125                 self.debs_button.set_name("OPTION_BUTTON")
    126                 self.exes_button.set_name("OPTION_BUTTON")
     149               
     150                change_child=True
     151
     152                if self.stack.get_visible_child_name()=="debs":
     153                        if self.deb_box.check_changes():
     154                                change_child=self.deb_box.changes_detected_dialog()
     155                                if change_child:
     156                                        self.deb_box.set_info(self.core.var)
     157                                       
     158                                        for c in self.deb_box.package_list_box.get_children():
     159                                                self.deb_box.package_list_box.remove(c)
     160                       
     161                                        for x in self.core.var["deb"]["packages"]:
     162                                                self.deb_box.new_package_button("%s"%x)
     163                                       
     164                                       
     165                                        #self.apt_box.stack.set_visible_child_name("empty
     166                if change_child:
     167                        self.apt_box.set_info(self.core.var)
     168                        self.stack.set_visible_child_name("apt")
     169                        self.apt_button.set_name("SELECTED_OPTION_BUTTON")
     170                        self.debs_button.set_name("OPTION_BUTTON")
     171                        self.exes_button.set_name("OPTION_BUTTON")
    127172               
    128173        #def apt_button_clicked
     
    130175        def debs_button_clicked(self,widget):
    131176               
    132                 self.stack.set_visible_child_name("debs")
    133                 self.apt_button.set_name("OPTION_BUTTON")
    134                 self.debs_button.set_name("SELECTED_OPTION_BUTTON")
    135                 self.exes_button.set_name("OPTION_BUTTON")
     177                change_child=True
     178               
     179                if self.stack.get_visible_child_name()=="apt":
     180                        if self.apt_box.check_changes():
     181                                change_child=self.apt_box.changes_detected_dialog()
     182                                if change_child:
     183                                        self.apt_box.set_info(self.core.var)
     184                                        apt_id=self.apt_box.current_id
     185                                        self.apt_box.url_entry.set_text(self.core.var["apt"][apt_id]["url"])
     186                                       
     187                                        for x in self.apt_box.package_list_box.get_children():
     188                                                self.apt_box.package_list_box.remove(x)
     189                       
     190                                        for x in self.core.var["apt"][apt_id]["packages"]:
     191                                                self.apt_box.new_package_button("%s"%x)
     192                                       
     193                                       
     194                                        #self.apt_box.stack.set_visible_child_name("empty")
     195                       
     196                       
     197               
     198                if change_child:
     199                       
     200                        self.stack.set_visible_child_name("debs")
     201                        self.apt_button.set_name("OPTION_BUTTON")
     202                        self.debs_button.set_name("SELECTED_OPTION_BUTTON")
     203                        self.exes_button.set_name("OPTION_BUTTON")
    136204               
    137205        #def debs_button_clicked
  • lliurex-remote-installer/trunk/fuentes/lliurex-remote-installer-gui.install/usr/share/lliurex-remote-installer/N4dManager.py

    r3705 r3832  
    22
    33class N4dManager:
     4       
     5       
    46       
    57        def __init__(self):
     
    79                self.client=xmlrpclib.ServerProxy("https://localhost:9779")
    810                self.user=("lliurex","lliurex")
     11                self.N4D_VAR="LLX_REMOTE_INSTALLER"
    912               
    1013        #def init
     
    2427                       
    2528               
    26         #def
     29        #def
     30       
     31        def test_var (self):
     32               
     33                try:
     34                        self.variable=self.client.test_var(self.user,"LliureXRemoteInstaller",self.N4D_VAR,self.user[0],self.user[1])
     35                        return[True,self.variable]
     36               
     37                except Exception as e:
     38                        print e
     39                        return False
     40               
     41        #def ge
     42       
     43
     44        def get_variable (self):
     45               
     46                try:
     47                       
     48                        self.variable=self.client.get_variable(self.user,"VariablesManager",self.N4D_VAR)
     49                        return[True,self.variable]
     50               
     51                except Exception as e:
     52                        print e
     53                        return False
     54               
     55        #def get_value
     56       
     57       
     58       
     59        def set_variable (self,dict):
     60               
     61                try:
     62                        #self.variable.update(dict)
     63                        if self.client.set_variable(self.user,"VariablesManager",self.N4D_VAR,dict)[0]:
     64                                return True
     65                        else:
     66                                return False
     67               
     68                except Exception as e:
     69                        print e
     70                        return False
     71               
     72        #def set_variable
     73       
     74       
     75       
     76        def test_apt_list (self,dict):
     77               
     78                try:
     79                        list_apt_ok=self.client.test_apt_list(self.user,"LliureXRemoteInstaller",dict)
     80                        #list_apt_ok.wait()
     81                        print list_apt_ok
     82                        if list_apt_ok[0]:
     83                                return list_apt_ok
     84                        else:
     85                                return list_apt_ok
     86               
     87                except Exception as e:
     88                        print e
     89                        return False
     90               
     91        #def set_variable
     92       
     93        def test_deb_list (self,dict):
     94               
     95                try:
     96                        list_deb_ok=self.client.test_deb_list(self.user,"LliureXRemoteInstaller",dict)
     97                        #list_apt_ok.wait()
     98                        if list_deb_ok[0]:
     99                                return list_deb_ok
     100                        else:
     101                                return list_deb_ok
     102               
     103                except Exception as e:
     104                        print e
     105                        return False
     106               
     107        #def set_variable
     108       
     109        def app_deb_exist (self,app=None,url=None):
     110                try:
     111                        app_deb_tested=self.client.app_deb_exist(self.user,"LliureXRemoteInstaller",app,url)
     112                        return app_deb_tested
     113                       
     114                except Exception as e:
     115                        print e
     116                        return False
     117                       
     118               
     119        def send_file(self,ip,url_source,url_dest):
     120               
     121                try:
     122                        file_sended=self.client.send_file(self.user,"ScpManager",self.user[0],self.user[1],ip,url_source,url_dest)
     123                        #list_apt_ok.wait()
     124                        if file_sended["status"]:
     125                                return [True]
     126                        else:
     127                                return [False]
     128               
     129                except Exception as e:
     130                        print e
     131                        return False
     132               
     133        #def set_variable
     134       
     135        def remove_file(self,file):
     136               
     137                try:
     138                        file_sended=self.client.remove_file(self.user,"LliureXRemoteInstaller",file)
     139                        #list_apt_ok.wait()
     140                        return file_sended
     141               
     142                except Exception as e:
     143                        print e
     144                        return False
     145               
     146        #def set_variable
     147       
    27148       
    28149        def mi_funcion(self,param):
  • lliurex-remote-installer/trunk/fuentes/lliurex-remote-installer-gui.install/usr/share/lliurex-remote-installer/lliurex-remote-installer.ui

    r3705 r3832  
    146146    </child>
    147147  </object>
     148  <object class="GtkBox" id="deb_data_box">
     149    <property name="visible">True</property>
     150    <property name="can_focus">False</property>
     151    <property name="orientation">vertical</property>
     152    <child>
     153      <placeholder/>
     154    </child>
     155    <child>
     156      <object class="GtkLabel" id="package_label_deb">
     157        <property name="visible">True</property>
     158        <property name="can_focus">False</property>
     159        <property name="halign">start</property>
     160        <property name="valign">center</property>
     161        <property name="margin_left">15</property>
     162        <property name="margin_top">2</property>
     163        <property name="ypad">8</property>
     164        <property name="label" translatable="yes">DEB List to install</property>
     165        <property name="xalign">0</property>
     166      </object>
     167      <packing>
     168        <property name="expand">False</property>
     169        <property name="fill">True</property>
     170        <property name="position">1</property>
     171      </packing>
     172    </child>
     173    <child>
     174      <object class="GtkScrolledWindow" id="scrolledwindow4">
     175        <property name="height_request">200</property>
     176        <property name="visible">True</property>
     177        <property name="can_focus">True</property>
     178        <property name="margin_left">10</property>
     179        <property name="margin_right">10</property>
     180        <property name="shadow_type">in</property>
     181        <child>
     182          <object class="GtkViewport" id="deb_list_viewport">
     183            <property name="visible">True</property>
     184            <property name="can_focus">False</property>
     185            <child>
     186              <object class="GtkBox" id="deb_list_box">
     187                <property name="visible">True</property>
     188                <property name="can_focus">False</property>
     189                <property name="margin_left">10</property>
     190                <property name="margin_right">10</property>
     191                <property name="margin_top">10</property>
     192                <property name="margin_bottom">10</property>
     193                <property name="orientation">vertical</property>
     194                <child>
     195                  <placeholder/>
     196                </child>
     197              </object>
     198            </child>
     199          </object>
     200        </child>
     201      </object>
     202      <packing>
     203        <property name="expand">True</property>
     204        <property name="fill">True</property>
     205        <property name="position">2</property>
     206      </packing>
     207    </child>
     208    <child>
     209      <object class="GtkBox" id="box14">
     210        <property name="visible">True</property>
     211        <property name="can_focus">False</property>
     212        <child>
     213          <object class="GtkButton" id="apply_deb_button">
     214            <property name="label">gtk-apply</property>
     215            <property name="visible">True</property>
     216            <property name="can_focus">True</property>
     217            <property name="receives_default">True</property>
     218            <property name="margin_right">10</property>
     219            <property name="margin_bottom">10</property>
     220            <property name="use_stock">True</property>
     221          </object>
     222          <packing>
     223            <property name="expand">False</property>
     224            <property name="fill">True</property>
     225            <property name="padding">5</property>
     226            <property name="pack_type">end</property>
     227            <property name="position">0</property>
     228          </packing>
     229        </child>
     230      </object>
     231      <packing>
     232        <property name="expand">False</property>
     233        <property name="fill">True</property>
     234        <property name="pack_type">end</property>
     235        <property name="position">3</property>
     236      </packing>
     237    </child>
     238    <child>
     239      <object class="GtkBox" id="box11">
     240        <property name="visible">True</property>
     241        <property name="can_focus">False</property>
     242        <child>
     243          <object class="GtkButton" id="add_deb_button">
     244            <property name="label">gtk-add</property>
     245            <property name="visible">True</property>
     246            <property name="can_focus">True</property>
     247            <property name="receives_default">True</property>
     248            <property name="margin_right">10</property>
     249            <property name="margin_top">10</property>
     250            <property name="margin_bottom">10</property>
     251            <property name="use_stock">True</property>
     252          </object>
     253          <packing>
     254            <property name="expand">False</property>
     255            <property name="fill">True</property>
     256            <property name="padding">5</property>
     257            <property name="pack_type">end</property>
     258            <property name="position">0</property>
     259          </packing>
     260        </child>
     261      </object>
     262      <packing>
     263        <property name="expand">False</property>
     264        <property name="fill">True</property>
     265        <property name="position">4</property>
     266      </packing>
     267    </child>
     268  </object>
    148269  <object class="GtkWindow" id="main_window">
    149270    <property name="width_request">800</property>
     
    254375        <child>
    255376          <placeholder/>
    256         </child>
    257       </object>
    258     </child>
    259   </object>
    260   <object class="GtkWindow" id="new_package_window">
    261     <property name="can_focus">False</property>
    262     <property name="modal">True</property>
    263     <property name="window_position">center</property>
    264     <property name="transient_for">main_window</property>
    265     <child>
    266       <object class="GtkBox" id="box2">
    267         <property name="visible">True</property>
    268         <property name="can_focus">False</property>
    269         <property name="margin_left">10</property>
    270         <property name="margin_right">10</property>
    271         <property name="margin_top">10</property>
    272         <property name="margin_bottom">10</property>
    273         <property name="orientation">vertical</property>
    274         <property name="spacing">10</property>
    275         <child>
    276           <object class="GtkBox" id="box4">
    277             <property name="visible">True</property>
    278             <property name="can_focus">False</property>
    279             <property name="spacing">5</property>
    280             <child>
    281               <object class="GtkLabel" id="label1">
    282                 <property name="visible">True</property>
    283                 <property name="can_focus">False</property>
    284                 <property name="label" translatable="yes">Package name:</property>
    285               </object>
    286               <packing>
    287                 <property name="expand">False</property>
    288                 <property name="fill">True</property>
    289                 <property name="position">0</property>
    290               </packing>
    291             </child>
    292             <child>
    293               <object class="GtkEntry" id="package_list_entry">
    294                 <property name="visible">True</property>
    295                 <property name="can_focus">True</property>
    296               </object>
    297               <packing>
    298                 <property name="expand">True</property>
    299                 <property name="fill">True</property>
    300                 <property name="position">1</property>
    301               </packing>
    302             </child>
    303           </object>
    304           <packing>
    305             <property name="expand">False</property>
    306             <property name="fill">True</property>
    307             <property name="position">0</property>
    308           </packing>
    309         </child>
    310         <child>
    311           <object class="GtkLabel" id="label2">
    312             <property name="visible">True</property>
    313             <property name="can_focus">False</property>
    314             <property name="label" translatable="yes">&lt;i&gt;You can input several packages separated by commas.&lt;/i&gt;</property>
    315             <property name="use_markup">True</property>
    316             <property name="xalign">0</property>
    317           </object>
    318           <packing>
    319             <property name="expand">False</property>
    320             <property name="fill">True</property>
    321             <property name="position">1</property>
    322           </packing>
    323         </child>
    324         <child>
    325           <object class="GtkLabel" id="package_msg_label">
    326             <property name="visible">True</property>
    327             <property name="can_focus">False</property>
    328           </object>
    329           <packing>
    330             <property name="expand">False</property>
    331             <property name="fill">True</property>
    332             <property name="position">2</property>
    333           </packing>
    334         </child>
    335         <child>
    336           <object class="GtkBox" id="box8">
    337             <property name="visible">True</property>
    338             <property name="can_focus">False</property>
    339             <child>
    340               <object class="GtkButton" id="accept_add_package_button">
    341                 <property name="label">gtk-ok</property>
    342                 <property name="visible">True</property>
    343                 <property name="can_focus">True</property>
    344                 <property name="receives_default">True</property>
    345                 <property name="use_stock">True</property>
    346               </object>
    347               <packing>
    348                 <property name="expand">False</property>
    349                 <property name="fill">True</property>
    350                 <property name="pack_type">end</property>
    351                 <property name="position">0</property>
    352               </packing>
    353             </child>
    354             <child>
    355               <object class="GtkButton" id="cancel_add_package_button">
    356                 <property name="label">gtk-cancel</property>
    357                 <property name="visible">True</property>
    358                 <property name="can_focus">True</property>
    359                 <property name="receives_default">True</property>
    360                 <property name="use_stock">True</property>
    361               </object>
    362               <packing>
    363                 <property name="expand">False</property>
    364                 <property name="fill">True</property>
    365                 <property name="pack_type">end</property>
    366                 <property name="position">1</property>
    367               </packing>
    368             </child>
    369           </object>
    370           <packing>
    371             <property name="expand">False</property>
    372             <property name="fill">True</property>
    373             <property name="pack_type">end</property>
    374             <property name="position">3</property>
    375           </packing>
    376377        </child>
    377378      </object>
     
    503504            <property name="fill">True</property>
    504505            <property name="position">2</property>
     506          </packing>
     507        </child>
     508      </object>
     509    </child>
     510  </object>
     511  <object class="GtkWindow" id="new_package_window">
     512    <property name="can_focus">False</property>
     513    <property name="modal">True</property>
     514    <property name="window_position">center</property>
     515    <property name="transient_for">main_window</property>
     516    <child>
     517      <object class="GtkBox" id="box2">
     518        <property name="visible">True</property>
     519        <property name="can_focus">False</property>
     520        <property name="margin_left">10</property>
     521        <property name="margin_right">10</property>
     522        <property name="margin_top">10</property>
     523        <property name="margin_bottom">10</property>
     524        <property name="orientation">vertical</property>
     525        <property name="spacing">10</property>
     526        <child>
     527          <object class="GtkBox" id="box4">
     528            <property name="visible">True</property>
     529            <property name="can_focus">False</property>
     530            <property name="spacing">5</property>
     531            <child>
     532              <object class="GtkLabel" id="label1">
     533                <property name="visible">True</property>
     534                <property name="can_focus">False</property>
     535                <property name="label" translatable="yes">Package name:</property>
     536              </object>
     537              <packing>
     538                <property name="expand">False</property>
     539                <property name="fill">True</property>
     540                <property name="position">0</property>
     541              </packing>
     542            </child>
     543            <child>
     544              <object class="GtkEntry" id="package_list_entry">
     545                <property name="visible">True</property>
     546                <property name="can_focus">True</property>
     547              </object>
     548              <packing>
     549                <property name="expand">True</property>
     550                <property name="fill">True</property>
     551                <property name="position">1</property>
     552              </packing>
     553            </child>
     554          </object>
     555          <packing>
     556            <property name="expand">False</property>
     557            <property name="fill">True</property>
     558            <property name="position">0</property>
     559          </packing>
     560        </child>
     561        <child>
     562          <object class="GtkLabel" id="label2">
     563            <property name="visible">True</property>
     564            <property name="can_focus">False</property>
     565            <property name="label" translatable="yes">&lt;i&gt;You can input several packages separated by commas.&lt;/i&gt;</property>
     566            <property name="use_markup">True</property>
     567            <property name="xalign">0</property>
     568          </object>
     569          <packing>
     570            <property name="expand">False</property>
     571            <property name="fill">True</property>
     572            <property name="position">1</property>
     573          </packing>
     574        </child>
     575        <child>
     576          <object class="GtkLabel" id="package_msg_label">
     577            <property name="visible">True</property>
     578            <property name="can_focus">False</property>
     579          </object>
     580          <packing>
     581            <property name="expand">False</property>
     582            <property name="fill">True</property>
     583            <property name="position">2</property>
     584          </packing>
     585        </child>
     586        <child>
     587          <object class="GtkBox" id="box8">
     588            <property name="visible">True</property>
     589            <property name="can_focus">False</property>
     590            <child>
     591              <object class="GtkButton" id="accept_add_package_button">
     592                <property name="label">gtk-ok</property>
     593                <property name="visible">True</property>
     594                <property name="can_focus">True</property>
     595                <property name="receives_default">True</property>
     596                <property name="use_stock">True</property>
     597              </object>
     598              <packing>
     599                <property name="expand">False</property>
     600                <property name="fill">True</property>
     601                <property name="pack_type">end</property>
     602                <property name="position">0</property>
     603              </packing>
     604            </child>
     605            <child>
     606              <object class="GtkButton" id="cancel_add_package_button">
     607                <property name="label">gtk-cancel</property>
     608                <property name="visible">True</property>
     609                <property name="can_focus">True</property>
     610                <property name="receives_default">True</property>
     611                <property name="use_stock">True</property>
     612              </object>
     613              <packing>
     614                <property name="expand">False</property>
     615                <property name="fill">True</property>
     616                <property name="pack_type">end</property>
     617                <property name="position">1</property>
     618              </packing>
     619            </child>
     620          </object>
     621          <packing>
     622            <property name="expand">False</property>
     623            <property name="fill">True</property>
     624            <property name="pack_type">end</property>
     625            <property name="position">3</property>
    505626          </packing>
    506627        </child>
Note: See TracChangeset for help on using the changeset viewer.