Esempio n. 1
0
 def __init__(self,
              columns,
              column_types,
              rows,
              box,
              default_size=(380, 200)):
     assert len(columns) == (len(column_types) - 1)
     if (len(rows) > 0) and (len(rows[0]) != len(column_types)):
         raise RuntimeError("Wrong number of rows:\n%s" % str(rows[0]))
     import gtk
     self.liststore = gtk.ListStore(*column_types)
     self.listmodel = gtk.TreeModelSort(self.liststore)
     self.listctrl = gtk.TreeView(self.listmodel)
     self.listctrl.column = [None] * len(columns)
     self.listctrl.cell = [None] * len(columns)
     for i, column_label in enumerate(columns):
         cell = gtk.CellRendererText()
         column = gtk.TreeViewColumn(column_label)
         self.listctrl.append_column(column)
         column.set_sort_column_id(i)
         column.pack_start(cell, True)
         column.set_attributes(cell, text=i)
     self.listctrl.get_selection().set_mode(gtk.SELECTION_SINGLE)
     for row in rows:
         self.listmodel.get_model().append(row)
     self.listctrl.connect("cursor-changed", self.OnChange)
     sw = gtk.ScrolledWindow()
     w, h = default_size
     if len(rows) > 10:
         sw.set_size_request(w, h)
     else:
         sw.set_size_request(w, 30 + (20 * len(rows)))
     sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
     box.pack_start(sw, False, False, 5)
     inside_vbox = gtk.VBox(False, 0)
     sw.add(self.listctrl)
Esempio n. 2
0
    def __init__(self, store):
        assert isinstance(store, _snapshot_store)
        self.store = store
        self.sorted_store = gtk.TreeModelSort(self.store)
        self.sorted_store.set_sort_func(1000, self.store.sort_by_time)
        self.sorted_store.set_sort_column_id(1000, gtk.SORT_DESCENDING)

        r_time = gtk.CellRendererText()
        r_comment = gtk.CellRendererText()
        r_comment.set_property('editable', True)
        r_comment.connect('edited', self.r_comment_edited)
        c_date = gtk.TreeViewColumn()
        c_date.set_title(_('Date'))
        c_date.pack_start(r_time, False)
        c_date.set_cell_data_func(r_time, self.r_time_cell_function)
        c_date.set_sort_column_id(1000)
        c_comment = gtk.TreeViewColumn()
        c_comment.set_title(_('Comment'))
        c_comment.pack_start(r_comment)
        c_comment.set_cell_data_func(r_comment, self.r_comment_cell_function)
        view = self.view = gtk.TreeView(self.sorted_store)
        view.set_rules_hint(True)
        view.append_column(c_date)
        view.append_column(c_comment)
        view.get_selection().set_mode(gtk.SELECTION_SINGLE)
        view.get_selection().connect('changed', self.row_selected, view)
        view.set_tooltip_text(_('Double click to edit comment'))
        scroll = gtk.ScrolledWindow()
        scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scroll.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        scroll.add(view)
        scroll.set_size_request(300, -1)

        gtk.VBox.__init__(self, False, 5)
        self.pack_start(gtk.Label(_('snapshots')), False)
        self.pack_start(scroll)
Esempio n. 3
0
    def init_page_1(self):
        self.menu_items = []

        self.fields1 = self.xml.get_object('f_list_1')
        rend = gtk.CellRendererText()
        col = gtk.TreeViewColumn(_('Name'), rend, text=0)
        self.fields1.append_column(col)
        rend = gtk.CellRendererText()
        col = gtk.TreeViewColumn(_('Type'), rend, text=1)
        self.fields1.append_column(col)

        self.fm = gtk.ListStore(str, str, str, object)
        self.sfm = gtk.TreeModelSort(self.fm)
        self.sfm.set_sort_column_id(2, gtk.SORT_ASCENDING)
        self.fields1.set_model(self.sfm)
        self.s1 = self.fields1.get_selection()
        self.s1.connect('changed', self.list_1_select)
        self.fields = copy.copy(Config.get('base/fields').data)
        for key, item in self.fields.iteritems():
            self.fm.append((item.name, _typename[item.type], key, item))

        self.name1 = self.xml.get_object('name1')
        self.menu1 = self.xml.get_object('type1')

        name_store = gtk.ListStore(str, object)
        for k, v in sorted(_typename.items(), key=lambda x: x[1]):
            name_store.append([v, k])
        self.menu1.set_model(name_store)
        self.menu1.set_entry_text_column(0)
        renderer_text = gtk.CellRendererText()
        self.menu1.pack_start(renderer_text, True)
        self.menu1.add_attribute(renderer_text, 'text', 0)
        self.menu1.set_active(0)
        self.menu_items = [x[1] for x in name_store]
        self.current_menu = self.menu_items[0]
        self.check()
Esempio n. 4
0
    def __init__(self, stats=None):
        super(ProfilerTab, self).__init__()
        toolbar = gtk.HBox(spacing=6)
        self.pack_start(toolbar, expand=False, fill=True)
        self.model = ProfileModel(stats)
        self.profile = not stats and Profile()

        toggle = gtk.ToggleButton(gtk.STOCK_MEDIA_RECORD)
        toggle.set_use_stock(True)
        toggle.set_active(False)
        toggle.set_sensitive(bool(self.profile))
        toggle.connect('toggled', self.__toggle)
        toolbar.pack_start(toggle, expand=False)
        if not self.profile:
            toggle.set_tooltip_text(
                _("Loaded profiles cannot resume recording."))

        filtered = self.model.filter_new()
        align = gtk.Alignment(xscale=1.0, yscale=1.0)
        align.set_padding(0, 0, 6, 0)
        label = gtk.Label()
        self.entry = FilterEntry(filtered)
        label.set_mnemonic_widget(self.entry)
        label.set_text_with_mnemonic(_("_Filter:"))
        try: self.view = HintedTreeView(gtk.TreeModelSort(filtered))
        except NameError: self.view = gtk.TreeView(gtk.TreeModelSort(filtered))
        self.view.connect('row-activated', self.__open_to_line)
        self.view.set_enable_search(True)
        self.view.set_search_equal_func(self.model.matches)
        sw = gtk.ScrolledWindow()
        sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        sw.set_shadow_type(gtk.SHADOW_IN)
        sw.add(self.view)
        box = gtk.HBox(spacing=3)
        box.pack_start(label, expand=False)
        box.pack_start(self.entry)
        align.add(box)
        self.pack_start(sw, expand=True)

        toolbar.pack_start(align)

        cell = gtk.CellRendererText()
        cell.props.ellipsize = pango.ELLIPSIZE_MIDDLE

        column = gtk.TreeViewColumn(_("Filename"), cell)
        column.add_attribute(cell, 'text', 1)
        column.set_sort_column_id(1)
        column.set_resizable(True)
        column.set_expand(True)
        self.view.append_column(column)   

        column = gtk.TreeViewColumn(_("Function"), cell)
        column.add_attribute(cell, 'text', 2)
        column.set_sort_column_id(2)
        column.set_resizable(True)
        column.set_expand(True)
        self.view.append_column(column)   

        cell = gtk.CellRendererText()
        column = gtk.TreeViewColumn(_("Call #"), cell)
        column.add_attribute(cell, 'text', 4)
        column.set_sort_column_id(4)
        self.view.append_column(column)   
        column = gtk.TreeViewColumn(_("Total"), cell)
        column.add_attribute(cell, 'text', 6)
        column.set_sort_column_id(6)
        self.view.append_column(column)   
        column = gtk.TreeViewColumn(_("Inline"), cell)
        column.add_attribute(cell, 'text', 7)
        column.set_sort_column_id(7)
        self.view.append_column(column)   

        self.totalstats = gtk.Statusbar()
        self.pack_start(self.totalstats, expand=False)
        
        self.entry.grab_focus()
        self.running = False
        self.connect('destroy', self.__on_destroy)
Esempio n. 5
0
    def __init__(self,
                 path="AddEffect.ui",
                 root="frmAddEffect",
                 domain="LibreShot",
                 parent=None,
                 form=None,
                 project=None,
                 **kwargs):
        SimpleGtkBuilderApp.__init__(self, os.path.join(project.UI_DIR, path),
                                     root, domain, **kwargs)

        # Add language support
        _ = Language_Init.Translator(project).lang.gettext

        self.form = form
        self.project = project
        self.parent = parent
        EFFECTS_DIR = self.project.EFFECTS_DIR

        # Init Dropdown and model
        # create a ListStore
        self.store = gtk.ListStore(gtk.gdk.Pixbuf, str)
        self.sort_model = gtk.TreeModelSort(self.store)

        # Sort Effects ListStore
        self.sort_model.set_sort_column_id(1, gtk.SORT_ASCENDING)

        # Set the treeview's data model
        self.cboEffects.set_model(self.sort_model)

        # Init List of Effects
        effect_list = self.form.effect_list

        # Add effects to dropdown
        sorted_list = []
        for my_effect in effect_list:

            # is frei0r effect library installed?
            if self.form.has_frei0r_installed == False and my_effect.service.startswith(
                    "frei0r"):
                # frei0r not installed, and this is a frei0r effect
                # skip to next item in loop
                continue

            # does the frei0r installation include this effect?
            if my_effect.service.startswith("frei0r"):
                if my_effect.service not in self.form.filters:
                    # don't add this effect, skip to the next one
                    continue

            # get image for filter
            file_path = os.path.join(EFFECTS_DIR, "icons", "small",
                                     my_effect.icon)

            # get the pixbuf
            pbThumb = gtk.gdk.pixbuf_new_from_file(file_path)

            # add effect to tree
            item = self.store.append(None)
            self.store.set_value(item, 0, pbThumb)
            self.store.set_value(item, 1, _(my_effect.title))

        # show all controls
        self.frmAddEffect.show_all()
Esempio n. 6
0
    def set_layout(self):
        self.listore_model = ListoreModel()
        self.modelsort = gtk.TreeModelSort(self.listore_model)
        self.notify_store = Notify_Store(self.modelsort)
        self.text_buffer = gtk.TextBuffer()
        self.text_view = gtk.TextView(buffer=self.text_buffer)
        self.text_view.set_editable(False)
        self.text_view.set_wrap_mode(gtk.WRAP_WORD)
        self.text_view.set_justification(gtk.JUSTIFY_FILL)
        self.text_view.set_pixels_above_lines(5)
        self.text_view.set_pixels_below_lines(15)
        self.text_view.set_pixels_inside_wrap(5)
        self.text_view.set_left_margin(10)
        self.text_view.set_right_margin(10)
        self.view = webkit.WebView()

        #hpanel = gtk.HPaned()
        #hpanel.set_position(350)
        hboxGeneral = gtk.HBox(homogeneous=False)


        '''
        try:
            self.store = Store(db_filename="prueba.db")
        except:
            self.store = Store()'''
        self.store = Store()
        scroll = gtk.ScrolledWindow()
        scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scroll.add_with_viewport(self.notify_store)
        scroll.set_size_request(400, -1)

        #hpanel.pack1(scroll, resize = True, shrink = False)
        hboxGeneral.pack_start(scroll, False, False, 0)

        scroll = gtk.ScrolledWindow()
        scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scroll.add_with_viewport(self.view)


        #hpanel.pack2(scroll, resize = True, shrink = False)
        hboxGeneral.pack_start(scroll, True, True, 0)

        vbox = gtk.VBox()
        self.info_toolbar = ToolbarInfo()
        self.control_toolbar = ToolbarControl()
        vbox.pack_start(self.control_toolbar, False, False, 0)


        #vbox.pack_start(hpanel, True, True, 0)
        vbox.pack_start(hboxGeneral, True, True, 0)


        vbox.pack_start(self.info_toolbar, False, False, 0)


        #hpanel.show_all()
        hboxGeneral.show_all()
        

        self.add(vbox)
Esempio n. 7
0
    def __init__(self, lunch_master=None):
        global ICON_FILE
        self.master = lunch_master
        self.confirm_close = True  # should we ask if the user is sure to close the app?
        _commands = self.master.get_all_commands()

        # ------------------------------------------------------
        # Window and its icon
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_title("Lunch")
        self.window.connect("delete-event", self.destroy_app)
        #self.window.connect("destroy", self.destroy_app)
        WIDTH = 640
        HEIGHT = 480
        self.window.set_default_size(WIDTH, HEIGHT)

        if not os.path.exists(ICON_FILE):
            log.warning("Could not find icon file %s." % (ICON_FILE))
            basename = os.path.basename(ICON_FILE)
            directory = os.path.dirname(__file__)
            parent_dir = "/".join(directory.split("/")[0:-1])
            ICON_FILE = os.path.join(parent_dir, basename)
            log.warning("Using icon file %s" % (ICON_FILE))
        if os.path.exists(ICON_FILE):
            icon = gtk.gdk.pixbuf_new_from_file(ICON_FILE)
            self.window.set_icon_list(icon)
        else:
            log.warning("Could not find icon file %s." % (ICON_FILE))
            log.warning("Warning: Could not find icon file %s." % (ICON_FILE))

        # Vertical Box
        vbox = gtk.VBox(homogeneous=False)
        self.window.add(vbox)

        # ------------------------------------------------------
        # Menu bar
        self.ui_manager = None
        self.menubar = self._create_main_menu(self.window)
        vbox.pack_start(self.menubar, expand=False, fill=False)
        self.menubar.show()

        vpaned = gtk.VPaned()
        vbox.pack_start(vpaned, expand=True, fill=True)

        # ------------------------------------------------------
        # Scrollable with a TreeView
        scroller = gtk.ScrolledWindow()
        scroller.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        scroller.set_shadow_type(gtk.SHADOW_IN)
        scroller.set_size_request(-1, 250)
        frame1 = gtk.Frame(label=_("Processes"))
        frame1.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        frame1.add(scroller)
        vpaned.add1(frame1)
        # The ListStore contains the data.
        list_store = gtk.ListStore(str, str, str, int, str)
        # The TreeModelSort sorts the data
        self.model_sort = gtk.TreeModelSort(list_store)
        # The TreeView displays the sorted data in the GUI.
        self.tree_view_widget = gtk.TreeView(self.model_sort)
        self._setup_treeview()
        # self.tree_view_widget.set_property("has-tooltip", True)
        self.tree_view_widget.get_selection().connect(
            "changed", self.on_selected_command_changed)
        #self.tree_view_widget.connect("query-tooltip", self.on_treeview_tooltip_queried)
        scroller.add(self.tree_view_widget)
        for command in _commands:
            self._add_command_in_tree(command)

        self.master.command_added_signal.connect(self.on_command_added)
        self.master.command_removed_signal.connect(self.on_command_removed)

        # ------------------------------------------------------
        # TextView for the details
        scroller2 = gtk.ScrolledWindow()
        scroller2.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        scroller2.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        scroller2.set_size_request(-1, 50)
        viewport = gtk.Viewport()
        frame2 = gtk.Frame(label=_("Details"))
        frame2.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        frame2.add(scroller2)
        vpaned.add(frame2)
        #vbox.pack_start(scroller2, expand=False, fill=True)
        self.textview_widget = gtk.TextView()
        self._set_textview_appearance()
        scroller2.add(viewport)
        viewport.add(self.textview_widget)

        # ------------------------------------------------------
        # Box with buttons.
        hbox = gtk.HBox(homogeneous=True)
        vbox.pack_start(hbox, expand=False, fill=False)

        self.openlog_button_widget = gtk.Button(
            _("Open child process log file"))
        self.openlog_button_widget.connect("clicked", self.on_openlog_clicked)
        hbox.pack_start(self.openlog_button_widget)

        self.stop_command_button_widget = gtk.Button(_("Stop child process"))
        self.stop_command_button_widget.connect("clicked",
                                                self.on_stop_command_clicked)
        hbox.pack_start(self.stop_command_button_widget)

        self.start_command_button_widget = gtk.Button(_("Start child process"))
        self.start_command_button_widget.connect("clicked",
                                                 self.on_start_command_clicked)
        hbox.pack_start(self.start_command_button_widget)

        self.window.show_all()
Esempio n. 8
0
	def show(self):
 		self._window = self._xml.get_widget("dialog_tag_editor_ng")
 		self._window.set_transient_for(self._app.main_window.get_parent())
		for key in dir(self.__class__):
			if key[:3] == '_on':
				self._xml.signal_connect(key, getattr(self,key))
				
		self._feeds_widget = self._xml.get_widget("treeview_feeds")
		self._feeds_model = gtk.ListStore(int, str, bool, bool, bool) #feed_id, title, tagged, separator, newly toggled
		self._feeds_widget.set_row_separator_func(lambda m,i:m[i][self.SEPARATOR] == True)
		self._sorted_model = gtk.TreeModelSort(self._feeds_model)
		
		def feed_sort_func(model, i1, i2):
			#use lists to not affect actual values
			r1 = list(model[i1])
			r2 = list(model[i2])
			
			#if either is newly selected, treat as unchecked for sorting
			if r1[self.NEWLY_TOGGLED] == True: r1[self.TAGGED] = not r1[self.TAGGED]
			if r2[self.NEWLY_TOGGLED] == True: r2[self.TAGGED] = not r2[self.TAGGED]
			
			#test separator
			if r1[self.SEPARATOR] == True:
				if r2[self.TAGGED]: return -1
				else: return 1
			if r2[self.SEPARATOR] == True:
				if r1[self.TAGGED]: return 1
				else: return -1

			#test checkboxes
			if r1[self.TAGGED] != r2[self.TAGGED]:
				return r1[self.TAGGED] - r2[self.TAGGED]
			
			#correct for weird bug
			if r1[self.TITLE] is None: r1[self.TITLE] = ""
			if r2[self.TITLE] is None: r2[self.TITLE] = ""
				
			#sort by name
			if r1[self.TITLE].upper() < r2[self.TITLE].upper():
				return 1
			elif r1[self.TITLE].upper() == r2[self.TITLE].upper():
				return 0
			return -1
				
		self._sorted_model.set_sort_func(0, feed_sort_func) 
		self._sorted_model.set_sort_column_id(0, gtk.SORT_DESCENDING)

		self._feeds_widget.set_model(self._sorted_model)		
		
		renderer = gtk.CellRendererToggle()
		feed_column = gtk.TreeViewColumn('')
		feed_column.pack_start(renderer, True)
		self._feeds_widget.append_column(feed_column)
		feed_column.set_attributes(renderer, active=2)
		renderer.connect('toggled', self._feed_toggled)
		
		renderer = gtk.CellRendererText()
		feed_column = gtk.TreeViewColumn('Feeds')
		feed_column.pack_start(renderer, True)
		feed_column.set_attributes(renderer, markup=1)
		self._feeds_widget.append_column(feed_column)
		
		self._tags_widget = self._xml.get_widget("treeview_tags")
		tags_model = gtk.ListStore(str) #tag
		self._tags_widget.set_model(tags_model)		
		
		renderer = gtk.CellRendererText()
		renderer.set_property('editable', True)
		renderer.connect('edited', self._tag_name_edited)
		tag_column = gtk.TreeViewColumn('Tags')
		tag_column.pack_start(renderer, True)
		tag_column.set_attributes(renderer, markup=0)
		
		
		self._tags_widget.append_column(tag_column)
		
		self._tags_widget.get_selection().connect('changed', self._tags_widget_changed)
		
		pane = self._xml.get_widget("hpaned1")
		pane.set_position(200)
		
		if utils.RUNNING_HILDON:
			self._window.resize(650,300)
		else:
			self._window.resize(500,600)
		self._window.show()
		
		self._populate_lists()
Esempio n. 9
0
    def build_tree(self):
        hbox = gtk.HBox()
        self.pack_start(hbox, False, False, 5)
        if not self.small:
            hbox.pack_start(gtk.Label('Search: '), False, False, 5)
        self.entry = gtk.Entry()
        self.entry.connect('key-press-event', self.on_key_entry)
        self.entry.set_size_request(-1, -1)
        hbox.pack_start(self.entry, False, False, 0)
        """ Host List """
        self.store = gtk.TreeStore(gtk.gdk.Pixbuf, str, str, str, str, str)
        tree_model = gtk.TreeModelSort(self.store)
        self.tree = gtk.TreeView(tree_model)

        self.tree.connect('row-activated', self.on_connect)
        self.tree.connect('button_press_event', self.on_selected_hosts)

        self.tree.set_rubber_banding(True)
        self.treeselection = self.tree.get_selection()
        self.treeselection.set_mode(gtk.SELECTION_MULTIPLE)

        pango_font = pango.FontDescription(self.config['font_host_tree'])

        renderer_name = gtk.CellRendererText()
        renderer_name.set_property('font-desc', pango_font)
        render_pixbuf = gtk.CellRendererPixbuf()
        column = gtk.TreeViewColumn('Name')
        column.pack_start(render_pixbuf, False)
        column.pack_start(renderer_name, True)
        column.set_attributes(render_pixbuf, pixbuf=0)
        column.set_attributes(renderer_name, text=1)
        column.set_resizable(True)
        column.set_sort_column_id(1)
        self.tree.append_column(column)

        renderer_host = gtk.CellRendererText()
        renderer_host.set_padding(3, 0)
        renderer_host.set_property('font-desc', pango_font)
        column = gtk.TreeViewColumn('Host', renderer_host, text=2)
        column.set_resizable(True)
        column.set_sort_column_id(2)
        self.tree.append_column(column)

        renderer_username = gtk.CellRendererText()
        renderer_username.set_property('font-desc', pango_font)
        column = gtk.TreeViewColumn('Username', renderer_username, text=3)
        column.set_resizable(True)
        column.set_sort_column_id(3)
        self.tree.append_column(column)

        renderer_description = gtk.CellRendererText()
        renderer_description.set_property('font-desc', pango_font)
        column = gtk.TreeViewColumn('Description',
                                    renderer_description,
                                    text=4)
        column.set_resizable(True)
        self.tree.append_column(column)

        renderer_description = gtk.CellRendererText()
        column = gtk.TreeViewColumn('Uuid', renderer_description, text=5)
        column.set_visible(False)
        self.tree.append_column(column)

        scroll = gtk.ScrolledWindow()
        scroll.add(self.tree)
        self.pack_start(scroll, True, True, 0)
        self.rebuild_host_store()
Esempio n. 10
0
  def __init__(self, app, torrentHash, data):
    self.app = app
    ClientUtil.add_updater(self)
    self.torrentHash = torrentHash
    self.torrentData = data
    self.download = None
    #a mapping from peer id to row
    self.peerRows = {}
    self.attrIdx = {}
    
    self.COLUMNS = [ ("ip",           "IP",        "string"),
                     ("upRate",       "uRate",     "rate"),
                     ("downRate",     "dRate",     "rate"),
                     ("upTotal",      "uTotal",    "amount"),
                     ("downTotal",    "dTotal",    "amount"),
                     ("upChoked",     "uChoked",   "string"),
                     ("downChoked",   "dChoked",   "string"),
                     ("snub",         "Snub",      "string"),
                     ("upInterest",   "uInterest", "string"),
                     ("downInterest", "dInterest", "string"),
                     ("speed",        "Speed",     "rate"),
                     ("requests",     "Requests",  "string"),
                     ("circ",         "Circ",      "string"),
                     ("amountDone",   "Done",      "percent"),
                     ("client",       "Client",    "string"),
                     ("id",           "ID",        "string")]
    COLUMN_NAMES = [columnTuple[1] for columnTuple in self.COLUMNS]
    TYPE_LIST = []
    for columnTuple in self.COLUMNS:
      columnType = columnTuple[2]
      if columnType in ("string"):
        TYPE_LIST.append(gobject.TYPE_STRING)
      elif columnType == "amount":
        TYPE_LIST.append(gobject.TYPE_INT)
      elif columnType in ("rate", "percent"):
        TYPE_LIST.append(gobject.TYPE_FLOAT)
      else:
        raise Exception("Bad type for column:  %s" % (columnType))

    self.liststore = gtk.ListStore(*TYPE_LIST)
    modelfilter, treeview = GTKUtils.make_listview(self.liststore, COLUMN_NAMES)
    for i in range(0, len(self.COLUMNS)):
      attrName = self.COLUMNS[i][0]
      attrType = self.COLUMNS[i][2]
      self.attrIdx[attrName] = i
      if attrType == "string":
        GTKUtils.make_text_cell(treeview.columns[i], i, makeSortable=True)
      else:
        cellFunc = getattr(self, "_cell_data_" + attrType)
        self._make_number_cell(treeview.columns[i], i, cellFunc)
        
    #make treeview searchable
    treeview.set_search_column(0)
    #attach the filtermodel and treeview
    self.model = gtk.TreeModelSort(modelfilter)
    treeview.set_model(self.model)
    treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
    self.modelfilter, self.treeview = modelfilter, treeview
    scrolled_window = GTKUtils.make_scroll_box(self.treeview, hPolicy=gtk.POLICY_AUTOMATIC, vPolicy=gtk.POLICY_AUTOMATIC)
    scrolled_window.set_size_request(-1, 200)
    self.container = scrolled_window
Esempio n. 11
0
    def __init__(self,
                 index_ext,
                 opener,
                 filter_actionable=False,
                 tag_by_page=False,
                 use_workweek=False):
        self.real_model = gtk.TreeStore(bool, int, str, str, str, bool, bool,
                                        int, object)
        # VIS_COL, PRIO_COL, TASK_COL, DATE_COL, PAGE_COL, ACT_COL, OPEN_COL, TASKID_COL, TAGS_COL
        model = self.real_model.filter_new()
        model.set_visible_column(self.VIS_COL)
        model = gtk.TreeModelSort(model)
        model.set_sort_column_id(self.PRIO_COL, gtk.SORT_DESCENDING)
        BrowserTreeView.__init__(self, model)

        self.index_ext = index_ext
        self.opener = opener
        self.filter = None
        self.tag_filter = None
        self.label_filter = None
        self.filter_actionable = filter_actionable
        self.tag_by_page = tag_by_page
        self._tags = {}
        self._labels = {}

        # Add some rendering for the Prio column
        def render_prio(col, cell, model, i):
            prio = model.get_value(i, self.PRIO_COL)
            cell.set_property('text', str(prio))
            if prio >= 3: color = HIGH_COLOR
            elif prio == 2: color = MEDIUM_COLOR
            elif prio == 1: color = ALERT_COLOR
            else: color = None
            cell.set_property('cell-background', color)

        cell_renderer = gtk.CellRendererText()
        #~ column = gtk.TreeViewColumn(_('Prio'), cell_renderer)
        # T: Column header Task List dialog
        column = gtk.TreeViewColumn(' ! ', cell_renderer)
        column.set_cell_data_func(cell_renderer, render_prio)
        column.set_sort_column_id(self.PRIO_COL)
        self.append_column(column)

        # Rendering for task description column
        cell_renderer = gtk.CellRendererText()
        cell_renderer.set_property('ellipsize', pango.ELLIPSIZE_END)
        column = gtk.TreeViewColumn(_('Task'),
                                    cell_renderer,
                                    markup=self.TASK_COL)
        # T: Column header Task List dialog
        column.set_resizable(True)
        column.set_sort_column_id(self.TASK_COL)
        column.set_expand(True)
        if ui_environment['platform'] == 'maemo':
            column.set_min_width(250)  # don't let this column get too small
        else:
            column.set_min_width(300)  # don't let this column get too small
        self.append_column(column)
        self.set_expander_column(column)

        if gtk.gtk_version >= (2, 12, 0):
            self.set_tooltip_column(self.TASK_COL)

        # Rendering of the Date column
        day_of_week = datetime.date.today().isoweekday()
        if use_workweek and day_of_week == 4:
            # Today is Thursday - 2nd day ahead is after the weekend
            delta1, delta2 = 1, 3
        elif use_workweek and day_of_week == 5:
            # Today is Friday - next day ahead is after the weekend
            delta1, delta2 = 3, 4
        else:
            delta1, delta2 = 1, 2

        today = str(datetime.date.today())
        tomorrow = str(datetime.date.today() + datetime.timedelta(days=delta1))
        dayafter = str(datetime.date.today() + datetime.timedelta(days=delta2))

        def render_date(col, cell, model, i):
            date = model.get_value(i, self.DATE_COL)
            if date == _NO_DATE:
                cell.set_property('text', '')
            else:
                cell.set_property('text', date)
                # TODO allow strftime here

            if date <= today: color = HIGH_COLOR
            elif date <= tomorrow: color = MEDIUM_COLOR
            elif date <= dayafter:
                color = ALERT_COLOR
                # "<=" because tomorrow and/or dayafter can be after the weekend
            else:
                color = None
            cell.set_property('cell-background', color)

        cell_renderer = gtk.CellRendererText()
        column = gtk.TreeViewColumn(_('Date'), cell_renderer)
        # T: Column header Task List dialog
        column.set_cell_data_func(cell_renderer, render_date)
        column.set_sort_column_id(self.DATE_COL)
        self.append_column(column)

        # Rendering for page name column
        cell_renderer = gtk.CellRendererText()
        column = gtk.TreeViewColumn(_('Page'),
                                    cell_renderer,
                                    text=self.PAGE_COL)
        # T: Column header Task List dialog
        column.set_sort_column_id(self.PAGE_COL)
        self.append_column(column)

        # Finalize
        self.refresh()

        # HACK because we can not register ourselves :S
        self.connect('row_activated', self.__class__.do_row_activated)
Esempio n. 12
0
    def __init__(self):
        basetreeview.KeepNoteBaseTreeView.__init__(self)
        self._sel_nodes = None

        # configurable callback for setting window status
        self.on_status = None

        # init model
        self.set_model(gtk.TreeModelSort(treemodel.KeepNoteTreeModel()))

        self.model.connect("sort-column-changed", self._sort_column_changed)

        # init view
        self.connect("key-release-event", self.on_key_released)
        self.connect("button-press-event", self.on_button_press)
        self.connect("row-expanded", self._on_listview_row_expanded)
        self.connect("row-collapsed", self._on_listview_row_collapsed)

        self.set_rules_hint(True)
        self.set_fixed_height_mode(True)

        # title column
        cell_icon = gtk.CellRendererPixbuf()
        self.title_text = gtk.CellRendererText()
        self.title_column = gtk.TreeViewColumn()
        self.title_column.set_title("Title")
        self.title_column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
        self.title_column.set_min_width(10)
        self.title_column.set_fixed_width(250)
        self.title_column.set_property("resizable", True)
        self.title_column.pack_start(cell_icon, False)
        self.title_column.pack_start(self.title_text, True)
        #self.title_column.connect("clicked", self.on_column_clicked)
        self.title_text.set_fixed_height_from_font(1)
        self.title_text.connect("edited", self.on_edit_title)
        self.title_text.connect("editing-started", self.on_editing_started)
        self.title_text.connect("editing-canceled", self.on_editing_canceled)
        self.title_text.set_property("editable", True)
        self.title_column.set_sort_column_id(
            self.rich_model.get_column_by_name("title_sort").pos)
        # map cells to columns in model
        self.title_column.add_attribute(
            cell_icon, 'pixbuf',
            self.rich_model.get_column_by_name("icon").pos)
        self.title_column.add_attribute(
            cell_icon, 'pixbuf-expander-open',
            self.rich_model.get_column_by_name("icon_open").pos)
        self.title_column.add_attribute(
            self.title_text, 'text',
            self.rich_model.get_column_by_name("title").pos)
        self.append_column(self.title_column)
        self.set_expander_column(self.title_column)

        # created column
        cell_text = gtk.CellRendererText()
        cell_text.set_fixed_height_from_font(1)
        column = gtk.TreeViewColumn()
        column.set_title("Created")
        column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
        column.set_property("resizable", True)
        column.set_min_width(10)
        column.set_fixed_width(150)
        column.set_sort_column_id(
            self.rich_model.get_column_by_name("created_time_sort").pos)
        #column.connect("clicked", self.on_column_clicked)
        #column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
        #column.set_property("min-width", 5)
        column.pack_start(cell_text, True)
        column.add_attribute(
            cell_text, 'text',
            self.rich_model.get_column_by_name("created_time").pos)
        self.append_column(column)

        # modified column
        cell_text = gtk.CellRendererText()
        cell_text.set_fixed_height_from_font(1)
        column = gtk.TreeViewColumn()
        column.set_title("Modified")
        column.set_property("sizing", gtk.TREE_VIEW_COLUMN_FIXED)
        column.set_property("resizable", True)
        column.set_min_width(10)
        column.set_fixed_width(150)
        column.set_sort_column_id(
            self.rich_model.get_column_by_name("modified_time_sort").pos)
        #column.connect("clicked", self.on_column_clicked)
        #column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
        #column.set_property("min-width", 5)
        column.pack_start(cell_text, True)
        column.add_attribute(
            cell_text, 'text',
            self.rich_model.get_column_by_name("modified_time").pos)
        self.append_column(column)

        # set default sorting
        # remember sort per node
        self.model.set_sort_column_id(
            self.rich_model.get_column_by_name("order").pos,
            gtk.SORT_ASCENDING)
        self.set_reorder(basetreeview.REORDER_ALL)

        self.menu = gtk.Menu()
        self.menu.attach_to_widget(self, lambda w, m: None)

        self.set_sensitive(False)
Esempio n. 13
0
 def init_gui(self):
     wt = gtk.glade.XML(GLADE_FILE)
     self.ui = utils.UI(wt.get_widget)
     
     # log view
     columns = [('sender', str), ('message', str), ('_message', str),
         ('created', str), ('_created', str), ('_color', str)]
     col_names = [x[0] for x in columns]
     col_types = [x[1] for x in columns]
     self.ui.model = root_model = gtk.TreeStore(*col_types)
     filter_model = root_model.filter_new()
     self.ui.log_model = model = gtk.TreeModelSort(filter_model)
     model.append = root_model.append
     model._iterators = {}
     model._columns = columns = dict((v, i) for i, v in enumerate(col_names))
     model.set_sort_column_id(columns['_created'], gtk.SORT_ASCENDING)
     
     view = self.ui.log_view
     view.set_model(model)
     view.modify_font(MONOSPACE_FONT)
     view.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
     
     # columns
     render = gtk.CellRendererText()
     column = gtk.TreeViewColumn('Sender', render, text=columns['sender'],
         foreground=columns['_color'])
     column.set_resizable(True)
     column.set_sort_column_id(columns['sender'])
     view.append_column(column)
     
     render = gtk.CellRendererText()
     column = gtk.TreeViewColumn('Message', render, text=columns['message'],
         foreground=columns['_color'])
     column.set_resizable(True)
     column.set_expand(True)
     column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
     column.set_sort_column_id(columns['message'])
     view.append_column(column)
     
     render = gtk.CellRendererText()
     column = gtk.TreeViewColumn('Created', render, text=columns['created'],
         foreground=columns['_color'])
     column.set_resizable(True)
     column.set_sort_column_id(columns['_created'])
     view.append_column(column)
     
     # autoscroll
     button = self.ui.log_autoscroll_button
     
     def toggled(button, view):
         if button.get_active():
             utils.scroll_treeview_to_bottom(view)
     button.connect('toggled', toggled, view)
     
     def scroll_to_bottom(model, path, it, view, button):
         if button.get_active():
             view.set_cursor(path)
     model.connect('row-inserted', scroll_to_bottom, view, button)
     
     # filter
     filter_model._filters = filters = {'sender': [], 'message': []}
     def visible(model, it, data):
         columns, filters = data
         def match_column(column, query):
             if not query:
                 return True
             value = model.get_value(it, columns[column])
             if not value:
                 return False
             if self._apply_log_filter(value, query):
                 return True
         return all([match_column(c, q) for c, q in filters.iteritems()])
     filter_model.set_visible_func(visible, (columns, filters))
     
     sender_entry = self.ui.log_filter_sender_entry
     message_entry = self.ui.log_filter_message_entry
     def changed(entry, column, filters, filter_model):
         filters[column] = self._parse_log_filter(entry.get_text())
         filter_model.refilter()
     sender_entry.connect('changed', changed, 'sender', filters, filter_model)
     message_entry.connect('changed', changed, 'message', filters, filter_model)
     
     button = self.ui.log_filter_button
     box = self.ui.log_filter_box
     def toggled(button, box, entry):
         active = button.get_active()
         box.set_property("visible", active)
         if active:
             gobject.idle_add(entry.grab_focus)
     button.connect('toggled', toggled, box, sender_entry)
     
     button = self.ui.log_filter_clear_button
     def clear(button, entries):
         for entry in entries:
             entry.set_text('')
     button.connect('clicked', clear, [sender_entry, message_entry])
     
     # mouse actions
     
     def button_press(view, event):
         if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS:
             # double-click
             # popup a dialog with full log message
             columns = self.ui.log_model._columns
             dialog = self.ui.log_details_dialog
             buf = self.ui.log_details_view.get_buffer()
             
             row = utils.get_selected_rows(view)[0]
             
             self.ui.log_details_sender_label.set_text(row[columns['sender']])
             self.ui.log_details_time_label.set_text(row[columns['created']])
             
             buf.set_text(row[columns['_message']])
             
             dialog.show()
         elif event.button == 3:
             # popup menu
             menu = self.ui.log_menu
             menu.show_all()
             menu.popup(None, None, None, event.button, event.time)
             # allow right-click to select if 1 or less rows are selected
             return len(utils.get_selected_rows(view)) > 1
     view.connect('button-press-event', button_press)
     
     button = self.ui.log_details_ok_button
     button.connect('clicked', lambda x: self.ui.log_details_dialog.hide())
     self.ui.log_details_view.modify_font(MONOSPACE_FONT)
     
     def copy_messages(item, view, columns):
         clipboard = gtk.clipboard_get()
         buf = []
         for row in utils.get_selected_rows(view):
             buf.append(row[columns['_message']])
         clipboard.set_text('\n'.join(buf))
     self.ui.log_copy_messages_menuitem.connect('activate', copy_messages, view, columns)
     
     def copy_logs(item, view, columns):
         import io, csv
         
         buf = io.BytesIO()
         writer = csv.writer(buf)
         
         copy_columns = ['sender', '_message', 'created']
         for row in utils.get_selected_rows(view):
             writer.writerow([row[columns[c]] for c in copy_columns])
         
         clipboard = gtk.clipboard_get()
         clipboard.set_text(buf.getvalue())
     self.ui.log_copy_logs_menuitem.connect('activate', copy_logs, view, columns)
     
     # add logging handler
     for logger in self.loggers:
         handler = TreeStoreHandler(model, self.gui_call, self.commander)
         handler.setLevel(logging.INFO)
         logger.addHandler(handler)
Esempio n. 14
0
    def treeview_widgets(self):
        # Treeview of current suite state, with filtering and sorting.
        # sorting is handled somewhat manually because the simple method
        # of interposing a TreeModelSort at the top:
        #   treestore = gtk.TreeStore(str, ...)
        #   tms = gtk.TreeModelSort( treestore )   #\
        #   tmf = tms.filter_new()                 #-- or other way round?
        #   tv = gtk.TreeView()
        #   tv.set_model(tms)
        # failed to produce correct results (the data displayed was not
        # consistently what should have been displayed given the
        # filtering in use) although the exact same code worked for a
        # liststore.

        self.sort_col_num = 0

        self.ttreestore = gtk.TreeStore(str, str, str, str, str, str, str, str,
                                        str, str, gtk.gdk.Pixbuf)
        self.tmodelfilter = self.ttreestore.filter_new()
        self.tmodelfilter.set_visible_func(self.visible_cb)
        self.tmodelsort = gtk.TreeModelSort(self.tmodelfilter)
        self.ttreeview = gtk.TreeView()
        self.ttreeview.set_rules_hint(True)
        self.ttreeview.set_model(self.tmodelsort)

        ts = self.ttreeview.get_selection()
        ts.set_mode(gtk.SELECTION_SINGLE)

        self.ttreeview.connect('button_press_event',
                               self.on_treeview_button_pressed)
        headings = [
            None, 'task', 'state', 'host', 'Job ID', 'T-submit', 'T-start',
            'T-finish', 'dT-mean', 'latest message'
        ]

        for n in range(1, len(headings)):
            # Skip first column (cycle point)
            tvc = gtk.TreeViewColumn(headings[n])
            if n == 1:
                crp = gtk.CellRendererPixbuf()
                tvc.pack_start(crp, False)
                tvc.set_attributes(crp, pixbuf=10)
            cr = gtk.CellRendererText()
            tvc.pack_start(cr, True)
            if n == 7:
                tvc.set_attributes(cr, markup=n)
            else:
                tvc.set_attributes(cr, text=n)
            tvc.set_resizable(True)
            tvc.set_clickable(True)
            self.ttreeview.append_column(tvc)
            tvc.set_sort_column_id(n - 1)
            self.tmodelsort.set_sort_func(n - 1, self.sort_column, n - 1)
        sw = gtk.ScrolledWindow()
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        sw.add(self.ttreeview)

        self.tfilterbox = gtk.VBox()
        subbox1 = gtk.HBox(homogeneous=True)
        subbox2 = gtk.HBox(homogeneous=True)
        self.tfilterbox.pack_start(subbox1)
        self.tfilterbox.pack_start(subbox2)

        self.tfilter_states = []

        dotm = DotMaker(self.theme, size='small')
        cnt = 0
        for st in task_state.legal:
            box = gtk.HBox()
            icon = dotm.get_image(st)
            cb = gtk.CheckButton(task_state.labels[st])
            tooltip = gtk.Tooltips()
            tooltip.enable()
            tooltip.set_tip(cb, "Filter by task state = %s" % st)

            box.pack_start(icon, expand=False)
            box.pack_start(cb, expand=False)
            cnt += 1
            if cnt > (len(task_state.legal) + 1) // 2:
                subbox2.pack_start(box, expand=False, fill=True)
            else:
                subbox1.pack_start(box, expand=False, fill=True)
            if st in self.tfilter_states:
                cb.set_active(False)
            else:
                cb.set_active(True)
            cb.connect('toggled', self.check_tfilter_buttons)

        self.filter_entry = EntryTempText()
        self.filter_entry.set_width_chars(7)
        self.filter_entry.connect("activate", self.check_filter_entry)
        self.filter_entry.set_temp_text("filter")
        tooltip = gtk.Tooltips()
        tooltip.enable()
        tooltip.set_tip(
            self.filter_entry, "Filter by task name.\n"
            "Enter a sub-string or regex and hit Enter\n"
            "(to reset, clear the entry and hit Enter)")
        subbox2.pack_start(self.filter_entry)
        cnt += 1

        if cnt % 2 != 0:
            # subbox2 needs another entry to line things up.
            subbox2.pack_start(gtk.HBox(), expand=False, fill=True)

        filter_hbox = gtk.HBox()
        filter_hbox.pack_start(self.tfilterbox, True, True, 10)
        vbox = gtk.VBox()
        vbox.pack_start(sw, True)
        vbox.pack_end(filter_hbox, False)

        return vbox
Esempio n. 15
0
 def __on_sort_ascending(self, item):
     self.populate()
     model = gtk.TreeModelSort(self.store)
     model.set_sort_column_id(ProtocolTree.COL_STR, gtk.SORT_ASCENDING)
     self.tree.set_rules_hint(True)
     self.tree.set_model(model)
Esempio n. 16
0
    def __init__(self):
        gtk.Window.__init__(self)
        self.port = 8080
        while True:
            try:
                self.server = HTTPProxyServer(self)
                break
            except socket.error:
                self.port += 1
        self.server.start()
        self.set_title(NAME)
        self.set_icon(mygtk.iconfactory.get_icon("httpripper", 32))
        self.set_default_size(600, 600)
        self.vbox = gtk.VBox()
        self.add(self.vbox)
        self.info = gtk.Label(
                _("HTTPRipper is running on localhost: %i") % self.port)
        self.vbox.pack_start(self.info, False, False)
        self.model = mygtk.ListStore(date=str, url=str, size=int, path=str,
                icon=str, content_type=str)
        self.model_filtered = self.model.filter_new()
        self.model_filtered.set_visible_func(self.row_visible)
        self.model_sort = gtk.TreeModelSort(self.model_filtered)
        self.treeview = gtk.TreeView(self.model_sort)
        self.treeview.set_rules_hint(True)
        self.treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
        self.treeview.connect("row-activated", self.save_file)
        self.treeview.set_search_column(self.model.columns.url)

        # add rows
        col = self.treeview.insert_column_with_attributes(0, _("Time"),
                gtk.CellRendererText(), text=self.model.columns.date)
        col.set_sort_column_id(self.model.columns.date)

        col = self.treeview.insert_column_with_attributes(1, _("Size"),
                gtk.CellRendererText(), text=self.model.columns.size)
        col.set_cell_data_func(col.get_cell_renderers()[0], byteformatdatafunc)
        col.set_sort_column_id(self.model.columns.size)

        renderer = gtk.CellRendererText()
        col = self.treeview.insert_column_with_attributes(2, _("Content-Type"),
                renderer, text=self.model.columns.content_type)
        renderer.set_property("ellipsize", pango.ELLIPSIZE_END)
        renderer.set_property("width", 100)
        col.set_sort_column_id(self.model.columns.content_type)

        col = self.treeview.insert_column_with_attributes(3, _("URL"),
                gtk.CellRendererText(), text=self.model.columns.url)
        col.set_expand(True)
        col.set_sort_column_id(self.model.columns.url)

        col = self.treeview.insert_column_with_attributes(0, "",
                gtk.CellRendererPixbuf(),
                **({"icon_name": self.model.columns.icon}))

        self.vbox.pack_start(mygtk.scrolled(self.treeview))
        #self.treeview.set_fixed_height_mode(True) # makes it a bit faster

        # filtering
        self.filter_content_type = ContentTypeFilter()
        self.filter_size = gtk.Entry()
        self.filter_size.connect("changed", lambda entry: self.model_filtered.refilter())
        self.filter_content_type.connect("changed", lambda combobox: self.model_filtered.refilter())
        self.filter_expander = gtk.Expander(label=_("Filter"))
        self.filter_expander.add(
                mygtk.make_table([
                    (llabel(_("Content-Type")), llabel(_("is")), self.filter_content_type),
                    (llabel(_("Size")), llabel(_("at least (KiB)")), self.filter_size),
                ])
        )
        self.vbox.pack_start(self.filter_expander, False, False)

        # buttons at the buttom
        self.buttonbox = gtk.HButtonBox()
        self.vbox.pack_end(self.buttonbox, False, False)

        self.button_record = gtk.ToggleButton(gtk.STOCK_MEDIA_RECORD)
        self.button_record.set_use_stock(True)
        self.button_record.connect("clicked", self.record)
        self.buttonbox.pack_start(self.button_record)

        self.button_save = gtk.Button(stock=gtk.STOCK_SAVE_AS)
        self.button_save.connect("clicked", self.save)
        self.buttonbox.pack_start(self.button_save)

        self.button_clear = gtk.Button(stock=gtk.STOCK_CLEAR)
        self.button_clear.connect("clicked", self.clear)
        self.buttonbox.pack_start(self.button_clear)

        self.button_about = gtk.Button(stock=gtk.STOCK_ABOUT)
        self.button_about.connect("clicked", self.about)
        self.buttonbox.pack_start(self.button_about)

        self.connect("destroy", self.clear)
        self.connect("destroy", lambda *args: self.server.shutdown())
        self.connect("destroy", gtk.main_quit)

        host, port, enabled, mode = get_proxy()
        if host == "localhost" and port == self.port and enabled:
            self.button_record.set_active(True)
Esempio n. 17
0
    def __init__(self, parent, mesh=None):
        debug.mainthreadTest()
        self.parent = parent  # Reference to the enclosing BoundaryCondPage.
        self.current_mesh = mesh
        debug.mainthreadTest()
        self.bcliststore = gtk.ListStore(gobject.TYPE_STRING,
                                         gobject.TYPE_PYOBJECT)
        self.sortedlist = gtk.TreeModelSort(self.bcliststore)
        self.gtk = gtk.TreeView(self.sortedlist)
        gtklogger.setWidgetName(self.gtk, "BCList")

        # Enable/disable column
        enablecell = gtk.CellRendererToggle()
        enablecol = gtk.TreeViewColumn("Enable")
        enablecol.pack_start(enablecell, expand=False)
        enablecol.set_cell_data_func(enablecell, self.renderEnableCell)
        self.gtk.append_column(enablecol)
        gtklogger.adoptGObject(enablecell,
                               self.gtk,
                               access_function=gtklogger.findCellRenderer,
                               access_kwargs={
                                   'col': 0,
                                   'rend': 0
                               })
        gtklogger.connect(enablecell, 'toggled', self.enableCellCB)
        ## Click on the column header to sort by Enabled status.
        ## Currently commented out because clicking on a toggle cell
        ## when sorting by Enable may trigger an instant re-sort,
        ## which moves the clicked cell.
        #         gtklogger.adoptGObject(enablecol, self.gtk,
        #                                access_method=gtk.TreeView.get_column,
        #                                access_args=(0,))
        #         gtklogger.connect_passive(enablecol, 'clicked')
        #         enablecol.set_sort_column_id(self.sortByEnableID)
        #         self.sortedlist.set_sort_func(self.sortByEnableID, self.sortByEnableFn)

        # Boundary condition name column
        bcnamecell = gtk.CellRendererText()
        bcnamecol = gtk.TreeViewColumn('Name')
        bcnamecol.pack_start(bcnamecell, expand=False)
        bcnamecol.set_attributes(bcnamecell, text=0)
        self.gtk.append_column(bcnamecol)
        gtklogger.adoptGObject(bcnamecol,
                               self.gtk,
                               access_method=gtk.TreeView.get_column,
                               access_args=(1, ))
        gtklogger.connect_passive(bcnamecol, 'clicked')
        bcnamecol.set_sort_column_id(self.sortByNameID)
        self.sortedlist.set_sort_func(self.sortByNameID, self.sortByNameFn)

        # Boundary name column
        bdycell = gtk.CellRendererText()
        bdycol = gtk.TreeViewColumn('Boundary')
        bdycol.pack_start(bdycell, expand=True)
        bdycol.set_cell_data_func(bdycell, self.renderBdy)
        self.gtk.append_column(bdycol)
        gtklogger.adoptGObject(bdycol,
                               self.gtk,
                               access_method=gtk.TreeView.get_column,
                               access_args=(2, ))
        gtklogger.connect_passive(bdycol, 'clicked')
        bdycol.set_sort_column_id(self.sortByBdyID)
        self.sortedlist.set_sort_func(self.sortByBdyID, self.sortByBdyFn)

        # Boundary condition column
        bccell = gtk.CellRendererText()
        bccol = gtk.TreeViewColumn('Condition')
        bccol.pack_start(bccell, expand=True)
        bccol.set_cell_data_func(bccell, self.renderBC)
        self.gtk.append_column(bccol)

        selection = self.gtk.get_selection()
        gtklogger.adoptGObject(selection,
                               self.gtk,
                               access_method=self.gtk.get_selection)

        self.signals = (gtklogger.connect(selection, 'changed', self.selectCB),
                        gtklogger.connect(self.gtk, 'row-activated',
                                          self.doubleClickCB))

        # Set initial sorting method
        self.lastsortcol = bcnamecol
        self.sortedlist.set_sort_column_id(self.sortByNameID,
                                           gtk.SORT_ASCENDING)
Esempio n. 18
0
    def __init__(self, window, app):
        self.app = app
        self.vbox = gtk.VBox(False, 0)
        self.label = gtk.Label(self.app.currentdir)
        self.hbox = gtk.HBox(False, 0)

        self.vbox.pack_start(self.label, False, False, 0)
        self.vbox.pack_start(self.hbox, True, True, 0)

        self.label.show()

        self.dirlist = gtk.ListStore(str)
        self.dirListWin = gtk.ScrolledWindow()
        self.dirListWin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)
        self.dirListSorted = gtk.TreeModelSort(self.dirlist)
        self.dirListSorted.set_sort_column_id(0, gtk.SORT_ASCENDING)
        self.dirListView = gtk.TreeView(self.dirListSorted)
        self.dirlistcol = gtk.TreeViewColumn('')
        self.dirListView.append_column(self.dirlistcol)
        self.dirListView.set_headers_visible(False)
        self.cell1 = gtk.CellRendererText()
        self.dirlistcol.pack_start(self.cell1, True)
        self.dirlistcol.add_attribute(self.cell1, 'text', 0)
        self.dirListWin.add(self.dirListView)
        self.dirListView.show()
        self.dirListWin.show()
        self.dirListView.connect("row-activated", self.dirSelected)

        self.filelist = gtk.ListStore(str)
        self.fileListWin = gtk.ScrolledWindow()
        self.fileListWin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)
        self.fileListSorted = gtk.TreeModelSort(self.filelist)
        self.fileListSorted.set_sort_column_id(0, gtk.SORT_ASCENDING)
        self.fileListView = gtk.TreeView(self.fileListSorted)
        self.filelistcol = gtk.TreeViewColumn('')
        self.fileListView.append_column(self.filelistcol)
        self.fileListView.set_headers_visible(False)
        self.cell2 = gtk.CellRendererText()
        self.filelistcol.pack_start(self.cell2, True)
        self.filelistcol.add_attribute(self.cell2, 'text', 0)
        self.fileListWin.add(self.fileListView)
        self.fileListView.show()
        self.fileListWin.show()
        self.fileListView.connect("row-activated", self.playSelected)

        self.hbox.pack_start(self.dirListWin, True, True, 0)
        self.hbox.pack_start(self.fileListWin, True, True, 0)
        self.hbox.show()

        # Queue and load buttons
        self.hbox2 = gtk.HBox(False, 0)
        self.queueBtn = gtk.Button("Add to playlist")
        self.queueBtn.connect("clicked", self.queueSelected)
        self.queueBtn.show()
        self.loadBtn = gtk.Button("Play now")
        self.loadBtn.connect("clicked", self.playSelected)
        self.loadBtn.show()

        self.hbox2.pack_start(self.queueBtn, True, True, 0)
        self.hbox2.pack_start(self.loadBtn, True, True, 0)
        self.hbox2.show()
        self.vbox.pack_start(self.hbox2, False, False, 0)

        window.add(self.vbox)
        self.vbox.show()
        window.show()
Esempio n. 19
0
File: oks.py Progetto: alnvdl/oks
    def load_table(self, table, force_reload=False):
        if table == self.table and not force_reload:
            return
        if self.tables.has_key(table):
            if table != self.table and self.table:
                # Save the current state
                self.save_state()
                self.clear_view()
            self.table = table
        else:
            raise KeyError, "The table %s is not supported." % table

        # If we are in report mode, just set it and ignore the table setting
        if self.mode == oks.MODE_REPORT:
            # Clear the previous report description and options
            self.label_report_description.set_text("")
            clear_gtk_container(self.table_report_options)

            self.window.set_title("Relatórios")
            self.vbox_report_options_frame.hide_all()

            reports = self.tables[table]["reports"]
            reports = [(report.NAME, report) for report in reports]
            self.combobox_report_type.set_options(*reports)

            # Restore the previous state
            report, scroll = self.tables[self.table]["report_state"]
            if report is not None:
                self.combobox_report_type.set_value(report)

            self.hpaned.set_position(300)
            return

        # Window title
        self.window.set_title(self.tables[table]["window_title"])

        # Search
        self.search_box.reset()
        for (label, searchWidget) in self.tables[table]["search_widgets"]:
            self.search_box.add_field(label, searchWidget)

        # Actions
        self.title.enable_actions(False)
        self.actions_enabled = not self.tables[table]["actions"] == []
        self.title.set_actions(*self.tables[table]["actions"])

        # Treeview
        if table not in self.models.keys():
            self.model = self.db.models[table]
            self.f_model = self.model.filter_new()
            self.f_model.set_visible_func(self.visible_func)
            self.sf_model = None
            if self.SORT:
                self.sf_model = gtk.TreeModelSort(self.f_model)
                sort_col, sort_type = self.tables[table]["default_sort"]
                if sort_col is not None and sort_type is not None:
                    self.sf_model.set_sort_column_id(sort_col, sort_type)
            self.models[table] = (self.model, self.f_model, self.sf_model)
        else:
            self.model, self.f_model, self.sf_model = self.models[table]

        for column in self.treeview.get_columns():
            self.treeview.remove_column(column)
        for column in self.tables[table]["columns"]:
            self.treeview.append_column(column)
        self.selected = None

        self.reload_search(False)
        if self.SORT:
            model = self.sf_model
        else:
            model = self.f_model
        self.treeview.set_model(model)

        action_new_label = self.tables[table]["new_stock"]
        if action_new_label:
            self.action_new.set_sensitive(True)
            self.action_new.set_property("label", action_new_label)
            self.action_new.set_property("short_label", action_new_label)
        else:
            self.action_new.set_sensitive(False)

        # Completion support
        completion = self.services["completion"]
        if self.tables[table].has_key("completion"):
            for entry, completion_name in self.tables[table]["completion"]:
                entry.set_completion(completion(completion_name))

        # Restore the previous state
        element, scroll = self.tables[self.table]["main_state"]
        if element is not None:
            self.treeview.get_selection().select_path(element)
            self.on_treeview_cursor_changed()
        else:
            self.clear_view()

        if scroll is not None:
            # Add a timeout to prevent flickering
            cb = lambda: self.treeview.scroll_to_point(scroll.x, scroll.y)            \
                                     False
            gobject.timeout_add(250, cb)

        self.hpaned.set_position(420)
        self.search_box.grab_focus()
        self.f_model.refilter()  # Refilter, so that the sorting works fine
Esempio n. 20
0
 def update_tree_model(self):
     """Construct a data model of other page data."""
     sub_sect_names = self.sections.keys()
     sub_var_names = []
     self.var_id_map = {}
     for section, variables in self.variables.items():
         for variable in variables:
             self.var_id_map[variable.metadata["id"]] = variable
     data_rows, column_names = self.get_model_data()
     data_rows, column_names, rows_are_descendants = self._apply_grouping(
         data_rows, column_names, self.group_index)
     self.column_names = column_names
     should_redraw = self.column_names != self._last_column_names
     if data_rows:
         col_types = [str] * len(data_rows[0])
     else:
         col_types = []
     need_new_store = (should_redraw or self.group_index)
     if need_new_store:
         # We need to construct a new TreeModel.
         if self._prev_sort_model is not None:
             prev_sort_id = self._prev_sort_model.get_sort_column_id()
         store = gtk.TreeStore(*col_types)
         self._prev_store = store
     else:
         store = self._prev_store
     parent_iter = None
     for i, row_data in enumerate(data_rows):
         insert_iter = store.iter_nth_child(None, i)
         if insert_iter is not None:
             for j, value in enumerate(row_data):
                 store.set_value(insert_iter, j, value)
         elif not rows_are_descendants:
             store.append(None, row_data)
         elif rows_are_descendants[i]:
             store.append(parent_iter, row_data)
         else:
             parent_data = [row_data[0]] + [None] * len(row_data[1:])
             parent_iter = store.append(None, parent_data)
             store.append(parent_iter, row_data)
     for extra_index in range(i + 1, store.iter_n_children(None)):
         remove_iter = store.iter_nth_child(None, extra_index)
         if remove_iter is not None:
             store.remove(remove_iter)
     if need_new_store:
         filter_model = store.filter_new()
         filter_model.set_visible_func(self._filter_visible)
         sort_model = gtk.TreeModelSort(filter_model)
         for i in range(len(self.column_names)):
             sort_model.set_sort_func(i, self.sort_util.sort_column, i)
         if (self._prev_sort_model is not None
                 and prev_sort_id[0] is not None):
             sort_model.set_sort_column_id(*prev_sort_id)
         self._prev_sort_model = sort_model
         sort_model.connect("sort-column-changed",
                            self.sort_util.handle_sort_column_change)
         if should_redraw:
             self.sort_util.clear_sort_columns()
             for column in list(self._view.get_columns()):
                 self._view.remove_column(column)
         self._view.set_model(sort_model)
     self._last_column_names = self.column_names
     return should_redraw
Esempio n. 21
0
    def __init__(self,
                 tasksview,
                 opener,
                 task_labels,
                 nonactionable_tags=(),
                 filter_actionable=False,
                 tag_by_page=False,
                 use_workweek=False,
                 compact=False,
                 flatlist=False,
                 sort_column=PRIO_COL,
                 sort_order=gtk.SORT_DESCENDING):
        self.real_model = gtk.TreeStore(bool, bool, int, str, str, object, str,
                                        str, int, int, str)
        # VIS_COL, ACT_COL, PRIO_COL, START_COL, DUE_COL, TAGS_COL, DESC_COL, PAGE_COL, TASKID_COL, PRIO_SORT_COL, PRIO_SORT_LABEL_COL
        model = self.real_model.filter_new()
        model.set_visible_column(self.VIS_COL)
        model = gtk.TreeModelSort(model)
        model.set_sort_column_id(sort_column, sort_order)
        BrowserTreeView.__init__(self, model)

        self.tasksview = tasksview
        self.opener = opener
        self.filter = None
        self.tag_filter = None
        self.label_filter = None
        self.filter_actionable = filter_actionable
        self.nonactionable_tags = tuple(
            t.strip('@').lower() for t in nonactionable_tags)
        self.tag_by_page = tag_by_page
        self.task_labels = task_labels
        self._tags = {}
        self._labels = {}
        self.flatlist = flatlist

        # Add some rendering for the Prio column
        def render_prio(col, cell, model, i):
            prio = model.get_value(i, self.PRIO_COL)
            text = model.get_value(i, self.PRIO_SORT_LABEL_COL)
            if text.startswith('>'):
                text = '<span color="darkgrey">%s</span>' % text
                bg = None
            else:
                bg = COLORS[min(prio, 3)]
            cell.set_property('markup', text)
            cell.set_property('cell-background', bg)

        cell_renderer = gtk.CellRendererText()
        column = gtk.TreeViewColumn('!', cell_renderer)
        column.set_cell_data_func(cell_renderer, render_prio)
        column.set_sort_column_id(self.PRIO_SORT_COL)
        self.append_column(column)

        # Rendering for task description column
        cell_renderer = gtk.CellRendererText()
        cell_renderer.set_property('ellipsize', pango.ELLIPSIZE_END)
        column = gtk.TreeViewColumn(_('Task'),
                                    cell_renderer,
                                    markup=self.DESC_COL)
        # T: Column header Task List dialog
        column.set_resizable(True)
        column.set_sort_column_id(self.DESC_COL)
        column.set_expand(True)
        if compact:
            column.set_min_width(100)
        else:
            column.set_min_width(300)  # don't let this column get too small
        self.append_column(column)
        self.set_expander_column(column)

        if gtk.gtk_version >= (2, 12) \
        and gtk.pygtk_version >= (2, 12):
            # custom tooltip
            self.props.has_tooltip = True
            self.connect("query-tooltip", self._query_tooltip_cb)

        # Rendering of the Date column
        day_of_week = datetime.date.today().isoweekday()
        if use_workweek and day_of_week == 4:
            # Today is Thursday - 2nd day ahead is after the weekend
            delta1, delta2 = 1, 3
        elif use_workweek and day_of_week == 5:
            # Today is Friday - next day ahead is after the weekend
            delta1, delta2 = 3, 4
        else:
            delta1, delta2 = 1, 2

        today = str(datetime.date.today())
        tomorrow = str(datetime.date.today() + datetime.timedelta(days=delta1))
        dayafter = str(datetime.date.today() + datetime.timedelta(days=delta2))

        def render_date(col, cell, model, i):
            date = model.get_value(i, self.DUE_COL)
            if date == _MAX_DUE_DATE:
                cell.set_property('text', '')
            else:
                cell.set_property('text', date)
                # TODO allow strftime here

            if date <= today: color = HIGH_COLOR
            elif date <= tomorrow: color = MEDIUM_COLOR
            elif date <= dayafter:
                color = ALERT_COLOR
                # "<=" because tomorrow and/or dayafter can be after the weekend
            else:
                color = None
            cell.set_property('cell-background', color)

        if not compact:
            cell_renderer = gtk.CellRendererText()
            column = gtk.TreeViewColumn(_('Date'), cell_renderer)
            # T: Column header Task List dialog
            column.set_cell_data_func(cell_renderer, render_date)
            column.set_sort_column_id(self.DUE_COL)
            self.append_column(column)

        # Rendering for page name column
        if not compact:
            cell_renderer = gtk.CellRendererText()
            column = gtk.TreeViewColumn(_('Page'),
                                        cell_renderer,
                                        text=self.PAGE_COL)
            # T: Column header Task List dialog
            column.set_sort_column_id(self.PAGE_COL)
            self.append_column(column)

        # Finalize
        self.refresh()

        # HACK because we can not register ourselves :S
        self.connect('row_activated', self.__class__.do_row_activated)
        self.connect('focus-in-event', self.__class__.do_focus_in_event)
Esempio n. 22
0
    def __init__(self, default, data_function=None):
        self._default = default
        self._profile = self._highlighted = None
        self._selection_active = False
        self._olddata = ()
        self._title_extra = ""

        # TC: profile dialog window title text.
        gtk.Dialog.__init__(self, _("IDJC Profile Manager"))
        self.set_size_request(600, 300)
        self.set_border_width(6)
        w = gtk.ScrolledWindow()
        w.set_border_width(6)
        w.set_shadow_type(gtk.SHADOW_ETCHED_OUT)
        w.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        self.get_content_area().add(w)
        self.store = gtk.ListStore(
                            gtk.gdk.Pixbuf, str, str, int, str, str, int, int)
        self.sorted = gtk.TreeModelSort(self.store)
        self.sorted.set_sort_func(1, self._sort_func)
        self.sorted.set_sort_column_id(1, gtk.SORT_ASCENDING)
        self.treeview = gtk.TreeView(self.sorted)
        self.treeview.set_headers_visible(True)
        self.treeview.set_rules_hint(True)
        w.add(self.treeview)
        autorend = gtk.CellRendererPixbuf()
        autorend.props.width = 16
        autorend.props.stock_id = gtk.STOCK_APPLY
        autorend.props.stock_size = gtk.ICON_SIZE_MENU
        pbrend = gtk.CellRendererPixbuf()
        pbrend.props.width = 16
        strrend = gtk.CellRendererText()
        ledrend = CellRendererLED()
        time_rend = CellRendererTime()
        strrend_ellip = gtk.CellRendererText()
        strrend_ellip.props.ellipsize = pango.ELLIPSIZE_END
        # TC: column heading. The available profile names appears below.
        c0 = gtk.TreeViewColumn(None, autorend, visible=7)
        image = gtk.image_new_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_MENU)
        c0.set_widget(image)
        image.show()
        self.treeview.append_column(c0)
        c1 = gtk.TreeViewColumn(_("Profile"))
        c1.pack_start(pbrend, expand=False)
        c1.pack_start(strrend)
        c1.add_attribute(pbrend, "pixbuf", 0)
        c1.add_attribute(strrend, "text", 1)
        c1.set_spacing(2)
        self.treeview.append_column(c1)
        # TC: column heading. The profile nicknames.
        c2 = gtk.TreeViewColumn(_("Nickname"), strrend, text=5)
        self.treeview.append_column(c2)
        # TC: column heading.
        c3 = gtk.TreeViewColumn(_("Description"), strrend_ellip, text=2)
        c3.set_expand(True)
        self.treeview.append_column(c3)
        # TC: column heading. The time a particular profile has been running.
        c4 = gtk.TreeViewColumn(_("Up-time"))
        c4.pack_start(ledrend)
        c4.pack_start(time_rend)
        c4.add_attribute(ledrend, "active", 3)
        c4.add_attribute(time_rend, "time", 6)
        c4.set_spacing(2)
        self.treeview.append_column(c4)
        self.selection = self.treeview.get_selection()
        self.selection.connect("changed", self._cb_selection)
        box = self.get_action_area()
        box.set_spacing(6)
        for attr, label, sec, stock in zip(
                ("new", "clone", "edit", "delete", "auto", "cancel", "choose"), 
                (gtk.STOCK_NEW, gtk.STOCK_COPY, gtk.STOCK_EDIT,
                 gtk.STOCK_DELETE, _("_Auto"), gtk.STOCK_QUIT, gtk.STOCK_OPEN),
                (True,) * 4 + (False,) * 3,
                (True,) * 4 + (False,) + (True,) * 2):
            w = gtk.Button(label)
            w.set_use_stock(stock)
            box.add(w)
            box.set_child_secondary(w, sec)
            setattr(self, attr, w)

        self.delete.set_no_show_all(True)
        self.cancel.connect("clicked", self._cb_cancel)
        self.set_data_function(data_function)
        self.connect("notify::visible", self._cb_visible)
        for each in self._signal_names:
            getattr(self, each).connect("clicked", self._cb_click, each)
        for each in self._new_profile_dialog_signal_names:
            getattr(self, each).connect("clicked", self._cb_new_profile_dialog,
                                                                        each)
Esempio n. 23
0
	def __init__(self, controller):
		GLIScreen.GLIScreen.__init__(self, controller)
	
		vert = gtk.VBox(False, 0)
		vert.set_border_width(10)
		self.gateway = ["",""] # device, ip
		self.gateway_is_set = False
		self.first_run = False
		
		# Treestore that holds the currently setup devices
		# -----------------------------------------------
		treedata = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, 
					 gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
		columns = []
		treedatasort = gtk.TreeModelSort(treedata)
		treeview = gtk.TreeView(treedatasort)
		#self.treeview.connect("cursor-changed", self.selection_changed)
		columns.append(gtk.TreeViewColumn("Device    ", gtk.CellRendererText(), text=1))
		columns.append(gtk.TreeViewColumn("IP Address", gtk.CellRendererText(), text=2))
		columns.append(gtk.TreeViewColumn("Broadcast ", gtk.CellRendererText(), text=3))
		columns.append(gtk.TreeViewColumn("Netmask      ", gtk.CellRendererText(), text=4))
		columns.append(gtk.TreeViewColumn("DHCP Options ", gtk.CellRendererText(), text=5))
		columns.append(gtk.TreeViewColumn("Gateway      ", gtk.CellRendererText(), text=6))
		col_num = 0
		for column in columns:
				column.set_resizable(True)
				column.set_sort_column_id(col_num)
				treeview.append_column(column)
				col_num += 1
		treewindow = gtk.ScrolledWindow()
		treewindow.set_size_request(-1, 125)
		treewindow.set_shadow_type(gtk.SHADOW_IN)
		treewindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
		treewindow.add(treeview)
		# -----------------------------------------------
		
		
		# Interface frame where you select the device
		# -----------------------------------------------
		#create the outside box for the ethernet device
		frame = gtk.Frame()
		# create the ethernet dropdown
		ethernet_select_combo = gtk.combo_box_entry_new_text()
		# pack it all into a box
		ethernet_and_label = gtk.HBox(False,0)
		label = gtk.Label(" _Interface: ")
		label.set_use_underline(True)
		save_button = gtk.Button("Save")
		save_button.set_size_request(100,-1)
		delete_button = gtk.Button("Delete")
		delete_button.set_size_request(100,-1)
		ethernet_and_label.pack_start(label, expand=False, fill=False, padding=5)
		ethernet_and_label.pack_start(ethernet_select_combo, expand=False, fill=False, padding=5)
		ethernet_and_label.pack_start(save_button, expand=False, fill=False, padding=5)
		ethernet_and_label.pack_start(delete_button, expand=False, fill=False, padding=5)
		# set the new widget to be the label plus the ethernet dropdown
		frame.set_label_widget(ethernet_and_label)
		# align it to the top left of the frame
		frame.set_label_align(0.0, .5)
		# -----------------------------------------------
		
		# Type Frame where you select static or dhcp
		# -----------------------------------------------
		# create the type of ethernet frame
		ethernet_type_frame_hbox = gtk.HBox(False, 0)
		ethernet_type_frame = gtk.Frame()
		ethernet_type_frame.set_border_width(5)
		# create the combo that holds the different types of interfaces
		ethernet_type_select_combo = gtk.combo_box_new_text()
		ethernet_type_select_combo.append_text("DHCP")
		ethernet_type_select_combo.append_text("Static")
		self.dhcp = 0
		self.static = 1
		# pack it into a box
		ethernet_type_and_label = gtk.HBox(False,0)
		label = gtk.Label(" _Configuration: ")
		label.set_use_underline(True)
		ethernet_type_and_label.pack_start(label, expand=False, fill=False, padding=5)
		ethernet_type_and_label.pack_start(ethernet_type_select_combo, expand=False, fill=False, padding=5)		
		# set the new widget to be the label plus the ethernet dropdown
		ethernet_type_frame.set_label_widget(ethernet_type_and_label)
		# align it to the top left of the frame
		ethernet_type_frame.set_label_align(0.0, .5)
		# -----------------------------------------------
		
		# Create the gtk.Notebook to hold the static and dhcp configurations
		# -----------------------------------------------
		static_and_dhcp_notebook = gtk.Notebook()
		static_and_dhcp_notebook.set_show_tabs(False) # hide the tabs
		static_and_dhcp_notebook.set_show_border(False) # hide the border
		#------------------------------------------------
		
		# Static configuration frame of the gtk.Notebook ( page 1 )
		# -----------------------------------------------
		# create the static configuration frame
		ethernet_static_frame_hbox = gtk.HBox(False, 0)
		ethernet_static_frame = gtk.Frame()
		ethernet_static_frame.set_border_width(5)
		ethernet_static_frame.set_shadow_type(gtk.SHADOW_NONE)
		#ethernet_static_frame.set_label("Static Configuration")
		#ethernet_static_frame.set_label_align(0.0, .5)
		# the hbox to pack the entry boxes into
		static_entry_table = gtk.Table(rows=4, columns=2, homogeneous=False)
		static_entry_table.set_row_spacings(5)
		
		# create the static ip box
		staticip_entry = gtk.Entry()
		staticip_entry.set_max_length(15)
		# pack it all into a box
		label = gtk.Label(" _IP Address: ")
		label.set_size_request(50,-1)
		label.set_use_underline(True)
		label.set_alignment(0.0, 0.5)
		#label.set_size_request(150, -1)
		static_entry_table.attach(label,0,1,0,1)
		static_entry_table.attach(staticip_entry,1,2,0,1)
	
		# create the broadcast box
		broadcastip_entry = gtk.Entry()
		broadcastip_entry.set_max_length(15)
		# pack it all into a box
		label = gtk.Label(" _Broadcast: ")
		label.set_use_underline(True)
		label.set_alignment(0.0, 0.5)
		static_entry_table.attach(label,0,1,1,2)
		static_entry_table.attach(broadcastip_entry,1,2,1,2)
		
		# create the netmask box
		netmaskip_entry = gtk.Entry()
		netmaskip_entry.set_max_length(15)
		# pack it all into a box
		label = gtk.Label(" _Netmask: ")
		label.set_use_underline(True)
		label.set_alignment(0.0, 0.5)
		static_entry_table.attach(label,0,1,2,3)
		static_entry_table.attach(netmaskip_entry,1,2,2,3)
		
		# create the gateway box
		gatewayip_entry = gtk.Entry()
		gatewayip_entry.set_max_length(15)
		# pack it all into a box
		label = gtk.Label(" _Gateway: ")
		label.set_use_underline(True)
		label.set_alignment(0.0, 0.5)
		static_entry_table.attach(label,0,1,3,4)
		static_entry_table.attach(gatewayip_entry,1,2,3,4)
		
		# now add the 1 table to the ethernet_static_frame
		static_entry_hbox = gtk.HBox(False,0)
		static_entry_hbox.set_border_width(5)
		static_entry_hbox.pack_start(static_entry_table, expand=False, fill=False, padding=5)
		ethernet_static_frame.add(static_entry_hbox)
		static_and_dhcp_notebook.append_page(ethernet_static_frame, gtk.Label("static"))
		#------------------------------------------------
		
		# Create the DHCP page of the gtk.Notebook ( page 2 )
		# -----------------------------------------------
		# create the dhcp configuration frame
		ethernet_dhcp_frame_hbox = gtk.HBox(False, 0)
		ethernet_dhcp_frame = gtk.Frame()
		ethernet_dhcp_frame.set_border_width(5)
		ethernet_dhcp_frame.set_shadow_type(gtk.SHADOW_NONE)
		#ethernet_dhcp_frame.set_label("DHCP Configuration")
		#ethernet_dhcp_frame.set_label_align(0.0, .5)
		# the hbox to pack the entry boxes into
		dhcp_entry_table = gtk.Table(rows=3, columns=2, homogeneous=False)
		dhcp_entry_table.set_row_spacings(5)
		
		# create the dhcp box
		dhcp_options_entry = gtk.Entry()
		dhcp_options_entry.set_max_length(15)
		# pack it all into a box
		label = gtk.Label(" _DHCP Options: ")
		label.set_size_request(50,-1)
		label.set_use_underline(True)
		label.set_alignment(0.0, 0.5)
		#label.set_size_request(150, -1)
		dhcp_entry_table.attach(label,0,1,0,1)
		dhcp_entry_table.attach(dhcp_options_entry,0,1,1,2)
		
		# now add the 1 table to the ethernet_static_frame
		dhcp_entry_hbox = gtk.HBox(False,0)
		dhcp_entry_hbox.set_border_width(50)
		dhcp_entry_hbox.pack_start(dhcp_entry_table, expand=False, fill=False, padding=5)
		ethernet_dhcp_frame.add(dhcp_entry_hbox)
		
		static_and_dhcp_notebook.append_page(ethernet_dhcp_frame, gtk.Label("dhcp"))
		# -----------------------------------------------
		
		# Create the wireless frame to hold wireless information
		# -----------------------------------------------
		# create the wireless frame
		wireless_frame_hbox = gtk.HBox(False, 0)
		wireless_frame = gtk.Frame()
		#wireless_frame.set_border_width(5)
		# align it to the top left of the frame
		wireless_frame.set_label_align(0.0, .5)
		# create the checkbox that will determine if you have wireless or not
		wireless_checkbox = gtk.CheckButton("Wireless")
		# pack it all into a box
		wireless_and_label = gtk.HBox(False,0)
		wireless_and_label.pack_start(wireless_checkbox, expand=False, fill=False, padding=5)
		# set the new widget to be the checkbox
		wireless_frame.set_label_widget(wireless_and_label)
		# create the wireless input boxes
		wireless_entry_table = gtk.Table(rows=2, columns=2, homogeneous=False)
		wireless_entry_table.set_row_spacings(5)
		# create the ESSID box
		essid_entry = gtk.Entry()
		essid_entry.set_max_length(30)
		# pack it all into a box
		essid_and_label = gtk.HBox(False,0)
		label = gtk.Label(" _ESSID: ")
		label.set_use_underline(True)
		label.set_alignment(0.0, 0.5)
		label.set_size_request(50,-1)
		wireless_entry_table.attach(label,0,1,0,1)
		wireless_entry_table.attach(essid_entry,1,2,0,1)
		# create the Key box
		key_entry = gtk.Entry()
		key_entry.set_max_length(15)
		# pack it all into a box
		key_and_label = gtk.HBox(False,0)
		label = gtk.Label(" _Key: ")
		label.set_use_underline(True)
		label.set_alignment(0.0, 0.5)
		wireless_entry_table.attach(label,0,1,1,2)
		wireless_entry_table.attach(key_entry,1,2,1,2)
		
		# add it to the wireless frame
		wireless_entry_hbox = gtk.HBox(False,0)
		wireless_entry_hbox.set_border_width(5)
		wireless_entry_hbox.pack_start(wireless_entry_table, expand=False, fill=False, padding=5)
		wireless_frame.add(wireless_entry_hbox)
		# -----------------------------------------------
		
		# Ethernet hardware information frame
		# -----------------------------------------------
		hardware_frame = gtk.Frame()
		#hardware_frame.set_border_width(5)
		# align it to the top left of the frame
		hardware_frame.set_label_align(0.0, .5)
		hardware_frame.set_label("Hardware Information")
		# create the textview to hold the hardware information
		#textview = gtk.TextView(buffer=None)
		#textview.set_editable(False)
		#textbuffer = textview.get_buffer()
		hardware_label = gtk.Label("No Device Selected")
		hardware_label.set_size_request(250,75)
		hardware_label.set_line_wrap(True)
		#textbuffer.set_text(string)
		hardware_frame.add(hardware_label)
		# -----------------------------------------------
		
		# add the configuration ethernet frame and wireless frame to the hbox.
		configuration_and_wireless_hbox = gtk.HBox(False, 0)
		wireless_and_hardware_vbox = gtk.VBox(False,0)
		wireless_and_hardware_vbox.pack_start(wireless_frame, expand=True, fill=True, padding=5)
		wireless_and_hardware_vbox.pack_start(hardware_frame, expand=True, fill=True, padding=5)		
		configuration_and_wireless_hbox.pack_start(ethernet_type_frame, expand=True, fill=True, padding=5)
		configuration_and_wireless_hbox.pack_start(wireless_and_hardware_vbox, expand=True, fill=True, padding=5)
			
		# add wireless and configuration to interface frame
		frame.add(configuration_and_wireless_hbox)
		
		# add the 1 hbox to the ethernet_type frame
		#ethernet_type_frame.add(ethernet_static_frame)
		
		# add the gtk.Notebook to the ethernet_type frame.
		ethernet_type_frame.add(static_and_dhcp_notebook)
		
		# finally show the frames ( after everything has been added )
		ethernet_static_frame.show()
		wireless_frame.show()
		ethernet_type_frame.show()
		frame.show()
		
		# add hostname
		bottom_hbox = gtk.VBox(False,0)
		hostname_entry = gtk.Entry()
		hostname_entry.set_max_length(50) # only as long as ipv4 addresses
		hostname_entry.set_size_request(150,-1)
		
		hostname_and_label = gtk.HBox(False,0)
		label = gtk.Label(" _Hostname: ")
		label.set_use_underline(True)
		label.set_size_request(150,-1)
		hostname_and_label.pack_start(label, expand=False, fill=False, padding=5)
		hostname_and_label.pack_start(hostname_entry, expand=False, fill=False, padding=5)
		
		# add dnsdomainname
		dnsdomainname_entry = gtk.Entry()
		dnsdomainname_entry.set_max_length(50) # only as long as ipv4 addresses
		dnsdomainname_entry.set_size_request(150,-1)
		
		dnsdomainname_and_label = gtk.HBox(False,0)
		label = gtk.Label(" _DNS Domain Name: ")
		label.set_use_underline(True)
		label.set_size_request(150,-1)
		dnsdomainname_and_label.pack_start(label, expand=False, fill=False, padding=5)
		dnsdomainname_and_label.pack_start(dnsdomainname_entry, expand=False, fill=False, padding=5)

		# pack the treewindow and overall options into an hbox
		top_window_hbox = gtk.HBox(False, 0)
		#static_options_vbox = gtk.VBox(False,0)
		#static_options_vbox.pack_start(hostname_and_label, expand=False, fill=False, padding=5)
		#static_options_vbox.pack_start(dnsdomainname_and_label, expand=False, fill=False, padding=5)
		#static_options_vbox.pack_start(gateway_and_label, expand=False, fill=False, padding=5)
		treeview_vbox = gtk.VBox(False,0)
		#treeview_vbox.pack_start(gtk.Label("Currently Saved Devices:"), expand=False, fill=False, padding=5)
		treeview_vbox.pack_start(treewindow, expand=False, fill=False, padding=5)
		top_window_hbox.pack_start(treeview_vbox, expand=True, fill=True, padding=5)
		#top_window_hbox.pack_end(static_options_vbox, expand=False, fill=False, padding=5)
		
		bottom_hbox.pack_start(hostname_and_label, expand=False, fill=False, padding=5)
		bottom_hbox.pack_start(dnsdomainname_and_label, expand=False, fill=False, padding=5)
		
		# pack the topmost frame
		vert.pack_start(top_window_hbox, expand=False, fill=False, padding=0)
		vert.pack_start(frame, expand=True, fill=True, padding=10)
		#vert.pack_start(bottom_hbox, expand=True, fill=True, padding=5)
		
		notebook = gtk.Notebook()
		#notebook.set_show_tabs(False)
		#self.add_content(vert)
		notebook.set_show_border(False)
		notebook.append_page(vert, gtk.Label("Device Information"))
		notebook.append_page(bottom_hbox, gtk.Label("Hostname / Proxy Information / Other"))
		self.add_content(notebook)
		
		# connect to widget events
		treeview.connect("cursor-changed", self.selection_changed)
		wireless_checkbox.connect("toggled", self.wireless_clicked)
		ethernet_type_select_combo.connect("changed", self.ethernet_type_changed)
		ethernet_select_combo.connect("changed", self.ethernet_device_selected)
		ethernet_select_combo.child.connect("activate", self.ethernet_device_added)
		static_and_dhcp_notebook.connect("switch-page", self.switch)
		save_button.connect("clicked", self.save_clicked)
		delete_button.connect("clicked", self.delete_clicked)
		
		# add all the boxes that we access later to a dictionary
		self.widgets = {"essid":essid_entry, "key":key_entry,
				"ipaddress":staticip_entry, "broadcast":broadcastip_entry, "netmask":netmaskip_entry,
				"ethernet_type":ethernet_type_select_combo, "wireless_checkbox":wireless_checkbox,
				"ethernet_device":ethernet_select_combo, "hardware_info":hardware_label,
				"static_dhcp_notebook":static_and_dhcp_notebook, "dhcp_options":dhcp_options_entry,
				"treedata":treedata, "treeview":treeview, "gateway":gatewayip_entry,
				"hostname":hostname_entry, "domainname":dnsdomainname_entry
				}
Esempio n. 24
0
    def __init__(self,
                 path,
                 args={},
                 selmode=gtk.SELECTION_SINGLE,
                 search_column=-1,
                 filter_func=None,
                 data=None,
                 radio_select=None,
                 radio_select_func=None,
                 progressbar=None):
        gtk.ScrolledWindow.__init__(self)
        self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)

        self.data = JsonList(radio_select)
        if data is None:
            r = login.getProxy().getResponse(
                path, args=args, hlib=login.getProxy().newConnection())
            if r.getheader('transfer-encoding') == 'chunked':
                # read first chunk, then read data in thread
                res = login.getProxy().chunkJson(r)
                self.data.data_header(res['h'])

                def __load_thread(self, rows, r, progressbar):
                    for i in range(1, rows + 1):
                        res = login.getProxy().chunkJson(r)

                        def _add_row(data, res, progressbar, rows, i):
                            data.append_row(res)
                            if progressbar:
                                progressbar.set_fraction(i / float(rows))
                                progressbar.set_text('{0} of {1}'.format(
                                    i, rows))

                        gobject.idle_add(_add_row, self.data, res, progressbar,
                                         rows, i)

                threading.Thread(target=__load_thread,
                                 args=(
                                     self,
                                     res['rows'],
                                     r,
                                     progressbar,
                                 )).start()
            else:
                data = json.loads(r.read())
                self.data.data_header(data['h'])
                self.data.reload(data['d'])
        else:
            self.data.data_header(data['h'])
            self.data.reload(data['d'])

        if filter_func:
            self.data = self.data.filter_new()
            self.data.set_filter_func(filter_func)

        self.sm = gtk.TreeModelSort(self.data)
        self.tv = gtk.TreeView(self.sm)
        self.tv.set_rules_hint(True)
        self.tv.get_selection().set_mode(selmode)

        # set sortable functions for
        for i in range(0, self.sm.get_n_columns()):
            self.sm.set_sort_func(i, _sort_func, i)

        if radio_select is not None:
            col = gtk.TreeViewColumn(radio_select)
            col.set_expand(False)
            cel = gtk.CellRendererToggle()
            cel.set_property('radio', True)
            if radio_select_func is not None:
                cel.connect('toggled', radio_select_func)
            col.pack_start(cel)
            self.tv.append_column(col)
            col.add_attribute(cel, 'active', len(self.data.names))

        for i in range(0, len(self.data.names)):
            col = gtk.TreeViewColumn(self.data.names[i])
            col.set_sort_column_id(i)
            if self.data.types[i] == str:
                col.set_expand(True)
            else:
                col.set_expand(False)
            if self.data.types[i] == bool:
                cel = gtk.CellRendererToggle()
                col.pack_start(cel)
                col.add_attribute(cel, 'active', i)
            elif self.data.types[i] == gobject.TYPE_PYOBJECT:
                continue
            else:
                cel = gtk.CellRendererText()
                col.pack_start(cel)
                if self.data.renders[i] is not None:
                    col.set_cell_data_func(cel, self.data.renders[i],
                                           self.data.cols[i])
                else:
                    col.set_attributes(cel, text=self.data.cols[i])

            self.tv.append_column(col)

        self.tv.set_reorderable(True)
        self.tv.set_search_column(search_column)

        self.add(self.tv)
Esempio n. 25
0
    def initialise_view(self):
        if len(self.shortcircuit) == 0:
            # Set TreeViews
            self.liststorefs = gtk.ListStore(str, str, str, str, str, long,
                                             gobject.TYPE_PYOBJECT)
            list_filter = self.liststorefs.filter_new()
            list_sort = gtk.TreeModelSort(list_filter)
            list_sort.set_sort_column_id(1, gtk.SORT_ASCENDING)

            self.snaptreeview = self.xml.get_widget("snaplist")
            self.snaptreeview.set_model(self.liststorefs)
            self.snaptreeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)

            cell0 = gtk.CellRendererText()
            cell1 = gtk.CellRendererText()
            cell2 = gtk.CellRendererText()
            cell3 = gtk.CellRendererText()
            cell4 = gtk.CellRendererText()
            cell5 = gtk.CellRendererText()

            typecol = gtk.TreeViewColumn(_("Type"),
                                            cell0, text = 0)
            typecol.set_sort_column_id(0)
            typecol.set_resizable(True)
            typecol.connect("clicked",
                self.__on_treeviewcol_clicked, 0)
            self.snaptreeview.append_column(typecol)

            mountptcol = gtk.TreeViewColumn(_("Mount Point"),
                                            cell1, text = 1)
            mountptcol.set_sort_column_id(1)
            mountptcol.set_resizable(True)
            mountptcol.connect("clicked",
                self.__on_treeviewcol_clicked, 1)
            self.snaptreeview.append_column(mountptcol)

            fsnamecol = gtk.TreeViewColumn(_("File System Name"),
                                           cell2, text = 2)
            fsnamecol.set_sort_column_id(2)
            fsnamecol.set_resizable(True)
            fsnamecol.connect("clicked",
                self.__on_treeviewcol_clicked, 2)
            self.snaptreeview.append_column(fsnamecol)

            snaplabelcol = gtk.TreeViewColumn(_("Snapshot Name"),
                                              cell3, text = 3)
            snaplabelcol.set_sort_column_id(3)
            snaplabelcol.set_resizable(True)
            snaplabelcol.connect("clicked",
                self.__on_treeviewcol_clicked, 3)
            self.snaptreeview.append_column(snaplabelcol)

            cell4.props.xalign = 1.0
            creationcol = gtk.TreeViewColumn(_("Creation Time"),
                                             cell4, text = 4)
            creationcol.set_sort_column_id(5)
            creationcol.set_resizable(True)
            creationcol.connect("clicked",
                self.__on_treeviewcol_clicked, 5)
            self.snaptreeview.append_column(creationcol)

            # Note to developers.
            # The second element is for internal matching and should not
            # be i18ned under any circumstances.
            typestore = gtk.ListStore(str, str)
            typestore.append([_("All"), "All"])
            typestore.append([_("Backups"), "Backup"])
            typestore.append([_("Snapshots"), "Snapshot"])

            self.typefiltercombo = self.xml.get_widget("typefiltercombo")
            self.typefiltercombo.set_model(typestore)
            typefiltercomboCell = gtk.CellRendererText()
            self.typefiltercombo.pack_start(typefiltercomboCell, True)
            self.typefiltercombo.add_attribute(typefiltercomboCell, 'text',0)

            # Note to developers.
            # The second element is for internal matching and should not
            # be i18ned under any circumstances.
            fsstore = gtk.ListStore(str, str)
            fslist = self.datasets.list_filesystems()
            fsstore.append([_("All"), None])
            for fsname,fsmount in fslist:
                fsstore.append([fsname, fsname])
            self.fsfilterentry = self.xml.get_widget("fsfilterentry")
            self.fsfilterentry.set_model(fsstore)
            self.fsfilterentry.set_text_column(0)
            fsfilterentryCell = gtk.CellRendererText()
            self.fsfilterentry.pack_start(fsfilterentryCell)

            schedstore = gtk.ListStore(str, str)
            # Note to developers.
            # The second element is for internal matching and should not
            # be i18ned under any circumstances.
            schedstore.append([_("All"), None])
            schedstore.append([_("Monthly"), "monthly"])
            schedstore.append([_("Weekly"), "weekly"])
            schedstore.append([_("Daily"), "daily"])
            schedstore.append([_("Hourly"), "hourly"])
            schedstore.append([_("1/4 Hourly"), "frequent"])
            self.schedfilterentry = self.xml.get_widget("schedfilterentry")
            self.schedfilterentry.set_model(schedstore)
            self.schedfilterentry.set_text_column(0)
            schedentryCell = gtk.CellRendererText()
            self.schedfilterentry.pack_start(schedentryCell)

            self.schedfilterentry.set_active(0)
            self.fsfilterentry.set_active(0)
            self.typefiltercombo.set_active(0)
        else:
            cloned = self.datasets.list_cloned_snapshots()
            num_snap = 0
            num_rsync = 0
            for snapname in self.shortcircuit:
                # Filter out snapshots that are the root
                # of cloned filesystems or volumes
                try:
                    cloned.index(snapname)
                    dialog = gtk.MessageDialog(None,
                                   0,
                                   gtk.MESSAGE_ERROR,
                                   gtk.BUTTONS_CLOSE,
                                   _("Snapshot can not be deleted"))
                    text = _("%s has one or more dependent clones "
                             "and will not be deleted. To delete "
                             "this snapshot, first delete all "
                             "datasets and snapshots cloned from "
                             "this snapshot.") \
                             % snapname
                    dialog.format_secondary_text(text)
                    dialog.run()
                    sys.exit(1)
                except ValueError:
                    path = os.path.abspath (snapname)
                    if not os.path.exists (path):
                        snapshot = zfs.Snapshot(snapname)
                        self.backuptodelete.append(snapshot)
                        num_snap += 1
                    else:
                        self.backuptodelete.append(RsyncBackup (snapname))
                        num_rsync += 1

            confirm = self.xml.get_widget("confirmdialog")
            summary = self.xml.get_widget("summarylabel")
            total = len(self.backuptodelete)

            text = ""
            if num_rsync != 0 :
                if num_rsync == 1:
                    text = _("1 external backup will be deleted.")
                else:
                    text = _("%d external backups will be deleted.") % num_rsync

            if num_snap != 0 :
                if len(text) != 0:
                    text += "\n"
                if num_snap == 1:
                    text += _("1 snapshot will be deleted.")
                else:
                    text += _("%d snapshots will be deleted.") % num_snap

            summary.set_text(text )
            response = confirm.run()
            if response != 2:
                sys.exit(0)
            else:
                # Create the thread in an idle loop in order to
                # avoid deadlock inside gtk.
                glib.idle_add(self.__init_delete)
        return False
Esempio n. 26
0
    def __init__(self):
        gtk.VBox.__init__(self, 2)
        self.cursor = None
        self.mounted_list = []
        self.path_first_button = ""
        self.path_second_button = ""
        self.path_third_button = ""

        #Dbus stuff
        self.bus = dbus.SystemBus()
        self.hal_manager_obj = self.bus.get_object(
            "org.freedesktop.Hal", "/org/freedesktop/Hal/Manager")
        self.hal_manager = dbus.Interface(self.hal_manager_obj,
                                          "org.freedesktop.Hal.Manager")

        #DiskPreviewUtils
        self.utils = DiskPreviewUtils.DiskPreviewUtils()

        #Glade stuff
        GLADEDIR = "/usr/share/ubiquity/glade/"
        self.xml = gtk.glade.XML(GLADEDIR + "diskpreview.glade",
                                 root="disk_preview_main_hbox")

        self.disk_preview_main_hbox = self.xml.get_widget(
            "disk_preview_main_hbox")
        self.disk_preview_sidebar_vbox = self.xml.get_widget(
            "disk_preview_sidebar_vbox")
        self.disk_preview_browser_vbox = self.xml.get_widget(
            "disk_preview_browser_vbox")
        self.disk_preview_treeview = self.xml.get_widget(
            "disk_preview_treeview")
        self.disk_preview_fs_label = self.xml.get_widget(
            "disk_preview_fs_label")
        self.disk_preview_free_label = self.xml.get_widget(
            "disk_preview_free_label")
        self.disk_preview_used_label = self.xml.get_widget(
            "disk_preview_ocu_label")
        self.disk_preview_total_label = self.xml.get_widget(
            "disk_preview_tam_label")
        self.disk_preview_info_panel = self.xml.get_widget(
            "disk_preview_info_panel")
        self.disk_preview_info_panel.hide()
        self.disk_preview_info_panel.set_no_show_all(True)
        self.disk_preview_path_hbox = self.xml.get_widget(
            "disk_preview_path_hbox")
        self.disk_preview_path_hbox.hide()
        self.disk_preview_path_hbox.set_no_show_all(True)
        self.disk_preview_back_button = self.xml.get_widget(
            "disk_preview_back_button")
        self.disk_preview_harddisk_button = self.xml.get_widget(
            "disk_preview_harddisk_button")
        self.disk_preview_first_dir_button = self.xml.get_widget(
            "disk_preview_first_dir_button")
        self.disk_preview_first_dir_label = self.xml.get_widget(
            "disk_preview_first_dir_label")
        self.disk_preview_second_dir_button = self.xml.get_widget(
            "disk_preview_second_dir_button")
        self.disk_preview_second_dir_label = self.xml.get_widget(
            "disk_preview_second_dir_label")
        self.disk_preview_third_dir_button = self.xml.get_widget(
            "disk_preview_third_dir_button")
        self.disk_preview_third_dir_label = self.xml.get_widget(
            "disk_preview_third_dir_label")
        self.disk_preview_forward_button = self.xml.get_widget(
            "disk_preview_forward_button")

        self.disk_preview_browser_iconview = self.xml.get_widget(
            "disk_preview_browser_iconview")

        self.disk_preview_browser_model = gtk.ListStore(
            str, gtk.gdk.Pixbuf, str)
        self.disk_preview_browser_iconview.set_model(
            self.disk_preview_browser_model)
        self.disk_preview_browser_iconview.set_text_column(0)
        self.disk_preview_browser_iconview.set_pixbuf_column(1)

        # self.disk_preview_treeview_model :
        #
        # gtk.gdk.Pixbuf : hard disk icon
        # str : Name of the hard disk or partition
        # str : Total partition space
        # str : Ocupated partition space
        # str : Free partition space
        # str : File system type
        # str : dev path
        # str : path of the mounted filesystem
        self.disk_preview_treeview_model = gtk.TreeStore(
            gtk.gdk.Pixbuf, str, str, str, str, str, str, str)
        self.disk_preview_treeview.set_model(self.disk_preview_treeview_model)
        disk_preview_treeview_sort = gtk.TreeModelSort(
            self.disk_preview_treeview_model)
        disk_preview_treeview_sort.set_sort_column_id(1, gtk.SORT_ASCENDING)

        cellrenderpixbuf = gtk.CellRendererPixbuf()
        cellrendertext = gtk.CellRendererText()
        column = gtk.TreeViewColumn('hd_icon', cellrenderpixbuf, pixbuf=0)
        self.disk_preview_treeview.append_column(column)
        column = gtk.TreeViewColumn('hd_name', cellrendertext, markup=1)
        self.disk_preview_treeview.append_column(column)

        self.pack_start(self.disk_preview_main_hbox, expand=True)

        selection = self.disk_preview_treeview.get_selection()
        selection.set_mode(gtk.SELECTION_SINGLE)

        #Signals
        selection.connect("changed",
                          self.__disk_preview_treview_row_changed_cb, None)
        self.disk_preview_browser_iconview.connect(
            "item-activated",
            self.__disk_preview_browser_iconview_item_activated_cb, None)
        self.disk_preview_harddisk_button.connect(
            "clicked", self.__disk_preview_harddisk_button_cb, None)
        self.fdb_handler_id = self.disk_preview_first_dir_button.connect(
            "toggled", self.__disk_preview_first_dir_button_cb, None)
        self.sdb_handler_id = self.disk_preview_second_dir_button.connect(
            "toggled", self.__disk_preview_second_dir_button_cb, None)
        self.tdb_handler_id = self.disk_preview_third_dir_button.connect(
            "toggled", self.__disk_preview_third_dir_button_cb, None)
        self.disk_preview_back_button.connect(
            "clicked", self.__disk_preview_back_button_cb, None)
        self.disk_preview_forward_button.connect(
            "clicked", self.__disk_preview_forward_button_cb, None)
Esempio n. 27
0
    def getScreen (self, anaconda):
        # We can't just use exclusiveDisks here because of kickstart.  First,
        # the kickstart file could have used ignoredisk --drives= in which case
        # exclusiveDisks would be empty.  Second, ignoredisk is entirely
        # optional in which case neither list would be populated.  Luckily,
        # storage.disks takes isIgnored into account and that handles both these
        # issues.
        disks = filter(lambda d: not d.format.hidden, anaconda.storage.disks)

        # Skip this screen as well if there's only one disk to use.
        if len(disks) == 1:
            anaconda.storage.clearPartDisks = [disks[0].name]
            anaconda.bootloader.drivelist = [disks[0].name]
            return None

        (xml, self.vbox) = gui.getGladeWidget("cleardisks.glade", "vbox")
        self.leftScroll = xml.get_widget("leftScroll")
        self.rightScroll = xml.get_widget("rightScroll")
        self.addButton = xml.get_widget("addButton")
        self.removeButton = xml.get_widget("removeButton")
        self.installTargetImage = xml.get_widget("installTargetImage")
        self.installTargetTip = xml.get_widget("installTargetTip")

        self.anaconda = anaconda

        self.leftVisible = 1
        self.leftActive = 2
        self.rightVisible = 4
        self.rightActive = 5

        # One store for both views.  First the obejct, then a visible/active for
        # the left hand side, then a visible/active for the right hand side, then
        # all the other stuff.
        #
        # NOTE: the third boolean is a placeholder.  DeviceSelector uses the third
        # slot in the store to determine whether the row is immutable or not.  We
        # just need to put False in there for everything.
        self.store = gtk.TreeStore(gobject.TYPE_PYOBJECT,
                                   gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN,
                                   gobject.TYPE_BOOLEAN,
                                   gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN,
                                   gobject.TYPE_STRING, gobject.TYPE_STRING,
                                   gobject.TYPE_STRING, gobject.TYPE_STRING,
                                   gobject.TYPE_STRING)
        self.store.set_sort_column_id(6, gtk.SORT_ASCENDING)

        # The left view shows all the drives that will just be mounted, but
        # can still be moved to the right hand side.
        self.leftFilteredModel = self.store.filter_new()
        self.leftSortedModel = gtk.TreeModelSort(self.leftFilteredModel)
        self.leftTreeView = gtk.TreeView(self.leftSortedModel)

        self.leftFilteredModel.set_visible_func(lambda model, iter, view: model.get_value(iter, self.leftVisible), self.leftTreeView)

        self.leftScroll.add(self.leftTreeView)

        self.leftDS = DeviceSelector(self.store, self.leftSortedModel,
                                     self.leftTreeView, visible=self.leftVisible,
                                     active=self.leftActive)
        self.leftDS.createMenu()
        self.leftDS.addColumn(_("Model"), 6)
        self.leftDS.addColumn(_("Capacity"), 7)
        self.leftDS.addColumn(_("Vendor"), 8)
        self.leftDS.addColumn(_("Identifier"), 9)
        self.leftDS.addColumn(_("Interconnect"), 10, displayed=False)

        # The right view show all the drives that will be wiped during install.
        self.rightFilteredModel = self.store.filter_new()
        self.rightSortedModel = gtk.TreeModelSort(self.rightFilteredModel)
        self.rightTreeView = gtk.TreeView(self.rightSortedModel)

        self.rightFilteredModel.set_visible_func(lambda model, iter, view: model.get_value(iter, self.rightVisible), self.rightTreeView)

        self.rightScroll.add(self.rightTreeView)

        self.rightDS = DeviceSelector(self.store, self.rightSortedModel,
                                      self.rightTreeView, visible=self.rightVisible,
                                      active=self.rightActive)
        self.rightDS.createSelectionCol(title=_("Boot\nLoader"), radioButton=True)
        self.rightDS.createMenu()
        self.rightDS.addColumn(_("Model"), 6)
        self.rightDS.addColumn(_("Capacity"), 7)
        self.rightDS.addColumn(_("Identifier"), 9)

        # Store the first disk (according to our detected BIOS order) for
        # auto boot device selection
        names = map(lambda d: d.name, disks)
        self.bootDisk = sorted(names, self.anaconda.storage.compareDisks)[0]

        # The device filtering UI set up exclusiveDisks as a list of the names
        # of all the disks we should use later on.  Now we need to go get those,
        # look up some more information in the devicetree, and set up the
        # selector.
        for d in disks:
            rightVisible = d.name in self.anaconda.storage.clearPartDisks
            rightActive = rightVisible and \
                          d.name in self.anaconda.bootloader.drivelist[:1]
            leftVisible = not rightVisible

            if hasattr(d, "wwid"):
                ident = d.wwid
            else:
                try:
                    ident = deviceNameToDiskByPath(d.name)
                    if ident.startswith("/dev/disk/by-path/"):
                        ident = ident.replace("/dev/disk/by-path/", "")
                except DeviceNotFoundError:
                    ident = d.name

            self.store.append(None, (d,
                                     leftVisible, True, False,
                                     rightVisible, rightActive,
                                     d.model,
                                     str(int(d.size)) + " MB",
                                     d.vendor, ident, d.bus))

        self.addButton.connect("clicked", self._add_clicked)
        self.removeButton.connect("clicked", self._remove_clicked)

        # Also allow moving devices back and forth with double click, enter, etc.
        self.leftTreeView.connect("row-activated", self._add_clicked)
        self.rightTreeView.disconnect(self.rightDS._activated_id)
        self.rightTreeView.connect("row-activated", self._remove_clicked)

        # And let the user select multiple devices at a time.
        self.leftTreeView.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
        self.rightTreeView.get_selection().set_mode(gtk.SELECTION_MULTIPLE)

        if self.anaconda.storage.clearPartType == CLEARPART_TYPE_LINUX:
            self.installTargetTip.set_markup(_("<b>Tip:</b> All Linux filesystems on the install target devices will be reformatted and wiped of any data.  Make sure you have backups."))
        elif self.anaconda.storage.clearPartType == CLEARPART_TYPE_ALL:
            self.installTargetTip.set_markup(_("<b>Tip:</b> The install target devices will be reformatted and wiped of any data.  Make sure you have backups."))
        else:
            self.installTargetTip.set_markup(_("<b>Tip:</b> Your filesystems on the install target devices will not be reformatted unless you choose to do so during customization."))

        return self.vbox
Esempio n. 28
0
    def createGamesWindow(self):
        '''
        Create TreeView of all Games on the server.

        @return: gtk.VBox containing a TreeView of all Games on the server.
        '''

        vbox = gtk.VBox(False, 1)

        self.gameList = gtk.TreeStore(str, str, str)

        self.client.getGameList()

        self.gameView = gtk.TreeView(gtk.TreeModelSort(self.gameList))
        self.gameView.set_headers_clickable(True)
        self.gameView.connect("button-press-event", self.gameListClicked_cb)

        title = _('Game')
        col1 = gtk.TreeViewColumn('%s' % title)
        col1.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE)

        cell1 = gtk.CellRendererText()
        col1.pack_start(cell1, True)
        col1.add_attribute(cell1, 'text', 0)
        col1.set_sort_column_id(0)

        title = _('Players')
        col2 = gtk.TreeViewColumn('# %s' % title)

        cell2 = gtk.CellRendererText()
        col2.pack_start(cell2, True)
        col2.add_attribute(cell2, 'text', 1)
        col2.set_sort_column_id(1)

        title = _('Status')
        col3 = gtk.TreeViewColumn('%s' % title)
        cell3 = gtk.CellRendererText()
        col3.pack_start(cell3, True)
        col3.add_attribute(cell3, 'text', 2)
        col3.set_sort_column_id(2)

        self.gameView.append_column(col1)
        self.gameView.append_column(col2)
        self.gameView.append_column(col3)

        header = gtk.Label()
        title = _('Game Listing')
        header.set_markup("<b><big>%s:</big></b>" % title)
        header.set_justify(gtk.JUSTIFY_LEFT)

        bbox = gtk.HButtonBox()
        self.joinButton = gtk.Button(label=_("Join Game"))
        self.spectateButton = gtk.Button(label=_("Watch Game"))

        self.spectateButton.connect("clicked", self.spectateGame)
        self.joinButton.connect("clicked", self.joinGame_cb)

        bbox.add(self.joinButton)
        bbox.add(self.spectateButton)

        window = gtk.ScrolledWindow()
        window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
        window.add(self.gameView)

        vbox.pack_start(header, False, False, 1)
        vbox.pack_start(window, True, True, 0)
        vbox.pack_start(bbox, False, False, 0)

        return vbox
Esempio n. 29
0
    def makeTreeViews(self):

        # User tree
        self.treestore = gtk.TreeStore(str)
        self.tm = gtk.TreeModelSort(self.treestore)
        self.tm.set_sort_column_id(0, gtk.SORT_ASCENDING)

        self.treeview = gtk.TreeView(self.tm)
        self.tvcolumn = gtk.TreeViewColumn('Online Users')
        self.treeview.append_column(self.tvcolumn)

        self.cell = gtk.CellRendererText()
        self.treeview.set_headers_clickable(True)
        self.treeview.connect("button_press_event", self.treeviewCallback,
                              None)
        self.cellpb = gtk.CellRendererPixbuf()
        self.tvcolumn.pack_start(self.cellpb, True)
        self.tvcolumn.pack_start(self.cell, False)
        self.tvcolumn.add_attribute(self.cell, 'text', 0)
        self.tvcolumn.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
        self.tvcolumn.set_cell_data_func(self.cellpb, self.userImage)
        self.tvcolumn.set_sort_column_id(0)

        scrolled = gtk.ScrolledWindow()
        scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scrolled.set_shadow_type(gtk.SHADOW_IN)
        scrolled.add(self.treeview)

        self.table.attach(scrolled, 4, 6, 0, 8)

        self.userPanel = userPanel(self.treestore)

        # Channel tree
        self.chantreestore = gtk.TreeStore(str, int, str)
        self.chantm = gtk.TreeModelSort(self.chantreestore)
        self.chantm.set_sort_column_id(0, gtk.SORT_ASCENDING)
        self.chantreeview = gtk.TreeView(self.chantm)

        tvcolumn = gtk.TreeViewColumn('Channel name')
        tvcolumn2 = gtk.TreeViewColumn("Persons")
        tvcolumn3 = gtk.TreeViewColumn("Description")

        self.chantreeview.set_headers_clickable(True)
        self.chantreeview.connect("button_press_event", self.chanviewCallback,
                                  None)

        self.chancell = gtk.CellRendererText()
        tvcolumn.pack_start(self.chancell, False)
        tvcolumn.add_attribute(self.chancell, 'text', 0)
        self.tvcolumn.set_sort_column_id(0)

        self.chancell = gtk.CellRendererText()
        tvcolumn2.pack_start(self.chancell, False)
        tvcolumn2.add_attribute(self.chancell, 'text', 1)
        tvcolumn2.set_sort_column_id(1)

        tvcolumn3.pack_start(self.chancell, False)
        tvcolumn3.add_attribute(self.chancell, 'text', 2)
        tvcolumn3.set_sort_column_id(2)

        self.chantreeview.append_column(tvcolumn)
        self.chantreeview.append_column(tvcolumn2)
        self.chantreeview.append_column(tvcolumn3)

        scrolled = gtk.ScrolledWindow()
        scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scrolled.set_shadow_type(gtk.SHADOW_IN)
        scrolled.add(self.chantreeview)

        self.channel_table.attach(scrolled, 0, 6, 0, 8, gtk.FILL, gtk.FILL, 20)
        self.chanPanel = chanPanel(self.chantreestore)

        # Server tree
        server_treestore = gtk.TreeStore(str)
        tm = gtk.TreeModelSort(server_treestore)
        tm.set_sort_column_id(0, gtk.SORT_ASCENDING)

        treeview = gtk.TreeView(tm)
        tvcolumn = gtk.TreeViewColumn('Servers')
        treeview.append_column(tvcolumn)
        treeview.set_headers_clickable(True)
        self.server_treeview = treeview

        cell = gtk.CellRendererText()
        tvcolumn.pack_start(cell, False)
        tvcolumn.add_attribute(cell, 'text', 0)
        tvcolumn.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
        tvcolumn.set_sort_column_id(0)

        scrolled = gtk.ScrolledWindow()
        scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        scrolled.set_shadow_type(gtk.SHADOW_IN)
        scrolled.add(treeview)

        self.server_tab.attach(scrolled, 0, 7, 1, 7, gtk.FILL, gtk.FILL, 20)
        self.server_treestore = server_treestore
        self.server_model = tm
        self.load_servers_from_file()
Esempio n. 30
0
    def load(self):
        splash, gui = self.splash, self.gui

        # Create the model for the exercise list (cols == columns)
        self.ex_ls_cols = {
            "file": 0,
            "fir": 1,
            "sector": 2,
            "comment": 3,
            "course": 4,
            "phase": 5,
            "day": 6,
            "pass_no": 7,
            "shift": 8,
            "PDP": 9,
            "course_text": 10,
            "n_flights": 11,
            "CPDP": 12,
            "wind_text": 13,
            "exercise_id": 14,
            "ejer": 15
        }
        # els = exercise list store
        els = self.els = gtk.ListStore(str, str, str, str, int, int, int, int,
                                       str, str, str, int, str, str, str, int)
        # This is the mapping between actually displayed cols and the model cols
        self.ex_tv_cols = (("FIR", "fir"), ("Sector", "sector"),
                           ("Prom - Fase - Día - Pasada", "CPDP"),
                           ("Ejer.", "ejer"), ("Vuelos", "n_flights"),
                           ("Viento", "wind_text"), ("Comentario", "comment"))

        # Process all exercise and fir files
        self.exercises = []
        self.firs = []

        # Find possible directories containing exercices
        pb = splash.get_widget("progressbar")
        pb.set_text('Cargando ejercicios')
        dirs = [
            dir for dir in os.listdir(EX_DIR) if dir[-4:] != ".svn"
            and S_ISDIR(os.stat(os.path.join(EX_DIR, dir))[ST_MODE])
        ]
        n_dirs = len(dirs)
        i = 0.

        for dir in dirs:  # File includes the path, filename doesn't
            pb.set_text(dir)
            i += 1. / n_dirs
            dir = os.path.join(EX_DIR, dir)
            pb.set_fraction(i)
            while gtk.events_pending():
                gtk.main_iteration()
            for e in load_exercises(dir):
                els.append(self.get_tvrow_from_ex(e))
                self.exercises.append(e)
            self.firs += load_firs(dir)

        self.etf = etf = els.filter_new()  # Exercise TreeFilter
        self.filters = {
            "fir": "---",
            "sector": "---",
            "course": "---",
            "phase": "---"
        }
        etf.set_visible_func(self.ex_is_visible)
        etv = self.etv  # Exercise Tree View
        etv.set_model(gtk.TreeModelSort(etf))
        etv.get_selection().set_mode(gtk.SELECTION_SINGLE)
        renderer = gtk.CellRendererText()
        for i, name in [(self.ex_ls_cols[ls_col], name)
                        for (name, ls_col) in self.ex_tv_cols]:
            column = gtk.TreeViewColumn(utf8conv(name), renderer, text=i)
            column.set_clickable(True)
            column.set_sort_column_id(i)
            column.set_resizable(True)
            etv.append_column(column)
        renderer.props.ypad = 0

        self.n_ex = len(els)
        self.sb.push(0, utf8conv("Cargados " + str(self.n_ex) + " ejercicios"))
        self.set_filter()  # Load all combos with all options
        UI.set_active_text(self.fircombo, conf.fir_option)
        UI.set_active_text(self.sectorcombo, conf.sector_option)
        UI.set_active_text(self.coursecombo, conf.course_option)
        UI.set_active_text(self.phasecombo, conf.phase_option)

        # Load aircraft type information
        self.types = BADA.load_types()

        # Everything's ready. Hide Splash, present Main Window
        splash.get_widget("Splash").destroy()
        self.MainWindow.present()