Exemplo n.º 1
0
 def __init__(self, selection, _log):
     self.clipboard = gtk.Clipboard(selection=selection)
     self.selection = selection
     self._log = _log
     self.owned_label = label()
     self.get_targets = gtk.combo_box_new_text()
     self.get_targets.set_sensitive(False)
     self.get_targets.connect("changed", self.get_target_changed)
     self.set_targets = gtk.combo_box_new_text()
     self.set_targets.append_text("STRING")
     self.set_targets.append_text("UTF8_STRING")
     self.set_targets.set_active(0)
     self.set_targets.connect("changed", self.set_target_changed)
     self.value_label = label()
     self.value_entry = gtk.Entry(max=100)
     self.value_entry.set_width_chars(32)
     self.clear_label_btn = gtk.Button("X")
     self.clear_label_btn.connect("clicked", self.clear_label)
     self.clear_entry_btn = gtk.Button("X")
     self.clear_entry_btn.connect("clicked", self.clear_entry)
     self.get_get_targets_btn = gtk.Button("Get Targets")
     self.get_get_targets_btn.connect("clicked", self.do_get_targets)
     self.get_target_btn = gtk.Button("Get Target")
     self.get_target_btn.connect("clicked", self.do_get_target)
     self.get_target_btn.set_sensitive(False)
     self.set_target_btn = gtk.Button("Set Target")
     self.set_target_btn.connect("clicked", self.do_set_target)
     self.get_string_btn = gtk.Button("Get String")
     self.get_string_btn.connect("clicked", self.do_get_string)
     self.set_string_btn = gtk.Button("Set String")
     self.set_string_btn.connect("clicked", self.do_set_string)
     self.clipboard.connect("owner-change", self.owner_changed)
     self.log("ready")
Exemplo n.º 2
0
	def __init__(self, selection, _log):
		self.clipboard = gtk.Clipboard(selection=selection)
		self.selection = selection
		self._log = _log
		self.owned_label = label()
		self.get_targets = gtk.combo_box_new_text()
		self.get_targets.set_sensitive(False)
		self.get_targets.connect("changed", self.get_target_changed)
		self.set_targets = gtk.combo_box_new_text()
		self.set_targets.append_text("STRING")
		self.set_targets.append_text("UTF8_STRING")
		self.set_targets.set_active(0)
		self.set_targets.connect("changed", self.set_target_changed)
		self.value_label = label()
		self.value_entry = gtk.Entry(max=100)
		self.value_entry.set_width_chars(32)
		self.clear_label_btn = gtk.Button("X")
		self.clear_label_btn.connect("clicked", self.clear_label)
		self.clear_entry_btn = gtk.Button("X")
		self.clear_entry_btn.connect("clicked", self.clear_entry)
		self.get_get_targets_btn = gtk.Button("Get Targets")
		self.get_get_targets_btn.connect("clicked", self.do_get_targets)
		self.get_target_btn = gtk.Button("Get Target")
		self.get_target_btn.connect("clicked", self.do_get_target)
		self.get_target_btn.set_sensitive(False)
		self.set_target_btn = gtk.Button("Set Target")
		self.set_target_btn.connect("clicked", self.do_set_target)
		self.get_string_btn = gtk.Button("Get String")
		self.get_string_btn.connect("clicked", self.do_get_string)
		self.set_string_btn = gtk.Button("Set String")
		self.set_string_btn.connect("clicked", self.do_set_string)
		self.clipboard.connect("owner-change", self.owner_changed)
		self.log("ready")
Exemplo n.º 3
0
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.connect("destroy", self.destroy)
        self.window.set_default_size(640, 300)
        self.window.set_border_width(20)

        vbox = gtk.VBox(False, 0)
        vbox.set_spacing(15)

        self.log = maxdeque(maxlen=25)
        for x in range(25):
            self.log.append("")
        self.events = gtk.Label()
        fixed = pango.FontDescription('monospace 9')
        self.events.modify_font(fixed)

        #how many clipboards to show:
        self.clipboards = ["CLIPBOARD", "PRIMARY", "SECONDARY"]
        if sys.platform.startswith("win"):
            self.clipboards = ["CLIPBOARD"]

        tb = TableBuilder()
        table = tb.get_table()
        labels = [label("Selection")]
        labels += [
            label("Value"),
            label("Clear"),
            label("Targets"),
            label("Actions")
        ]
        tb.add_row(*labels)
        for selection in self.clipboards:
            cs = ClipboardInstance(selection, self.add_event)
            get_actions = gtk.HBox()
            for x in (cs.get_get_targets_btn, cs.get_target_btn,
                      cs.get_string_btn):
                get_actions.pack_start(x)
            tb.add_row(label(selection), cs.value_label, cs.clear_label_btn,
                       cs.get_targets, get_actions)
            set_actions = gtk.HBox()
            for x in (cs.set_target_btn, cs.set_string_btn):
                set_actions.pack_start(x)
            tb.add_row(None, cs.value_entry, cs.clear_entry_btn,
                       cs.set_targets, set_actions)
        vbox.pack_start(table)
        vbox.add(self.events)

        self.window.add(vbox)
        self.window.show_all()
        icon = get_icon("clipboard.png")
        if icon:
            self.window.set_icon(icon)
        try:
            self.add_event(
                "ALL", "window=%s, xid=%s" %
                (self.window, hex(self.window.get_window().xid)))
        except:
            self.add_event("ALL", "window=%s" % self.window)
Exemplo n.º 4
0
	def	__init__(self):
		self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
		self.window.connect("destroy", self.destroy)
		self.window.set_default_size(640, 300)
		self.window.set_border_width(20)

		vbox = gtk.VBox(False, 0)
		vbox.set_spacing(15)

		self.log = maxdeque(maxlen=25)
		for x in range(25):
			self.log.append("")
		self.events = gtk.Label()
		fixed = pango.FontDescription('monospace 9')
		self.events.modify_font(fixed)

		#how many clipboards to show:
		self.clipboards = ["CLIPBOARD", "PRIMARY", "SECONDARY"]
		if sys.platform.startswith("win"):
			self.clipboards = ["CLIPBOARD"]

		tb = TableBuilder()
		table = tb.get_table()
		labels = [label("Selection")]
		labels += [label("Value"), label("Clear"), label("Targets"), label("Actions")]
		tb.add_row(*labels)
		for selection in self.clipboards:
			cs = ClipboardInstance(selection, self.add_event)
			get_actions = gtk.HBox()
			for x in (cs.get_get_targets_btn, cs.get_target_btn, cs.get_string_btn):
				get_actions.pack_start(x)
			tb.add_row(label(selection), cs.value_label, cs.clear_label_btn, cs.get_targets, get_actions)
			set_actions = gtk.HBox()
			for x in (cs.set_target_btn, cs.set_string_btn):
				set_actions.pack_start(x)
			tb.add_row(None, cs.value_entry, cs.clear_entry_btn, cs.set_targets, set_actions)
		vbox.pack_start(table)
		vbox.add(self.events)

		self.window.add(vbox)
		self.window.show_all()
		icon = get_icon("clipboard.png")
		if icon:
			self.window.set_icon(icon)
		try:
			self.add_event("ALL", "window=%s, xid=%s" % (self.window, hex(self.window.get_window().xid)))
		except:
			self.add_event("ALL", "window=%s" % self.window)
Exemplo n.º 5
0
    def __init__(self, client, session_name, window_icon_pixbuf, conn,
                 get_pixbuf):
        gtk.Window.__init__(self)
        self.client = client
        self.session_name = session_name
        self.connection = conn
        self.last_populate_time = 0
        self.last_populate_statistics = 0
        self.is_closed = False
        self.get_pixbuf = get_pixbuf
        self.set_title(self.session_name or "Session Info")
        self.set_destroy_with_parent(True)
        self.set_resizable(True)
        self.set_decorated(True)
        if window_icon_pixbuf:
            self.set_icon(window_icon_pixbuf)
        if is_gtk3():
            self.set_position(gtk.WindowPosition.CENTER)
        else:
            self.set_position(gtk.WIN_POS_CENTER)

        #tables on the left in a vbox with buttons at the top:
        self.tab_box = gtk.VBox(False, 0)
        self.tab_button_box = gtk.HBox(True, 0)
        self.tabs = []  #pairs of button, table
        self.populate_cb = None
        self.tab_box.pack_start(self.tab_button_box,
                                expand=False,
                                fill=True,
                                padding=0)

        #Package Table:
        tb = self.table_tab("package.png", "Software", self.populate_package)
        #title row:
        tb.attach(title_box(""), 0, xoptions=gtk.EXPAND | gtk.FILL, xpadding=0)
        tb.attach(title_box("Client"),
                  1,
                  xoptions=gtk.EXPAND | gtk.FILL,
                  xpadding=0)
        tb.attach(title_box("Server"),
                  2,
                  xoptions=gtk.EXPAND | gtk.FILL,
                  xpadding=0)
        tb.inc()

        scaps = self.client.server_capabilities
        from xpra.__init__ import __version__
        tb.new_row("Xpra", label(__version__),
                   label(self.client._remote_version or "unknown"))
        cl_rev, cl_ch, cl_date = "unknown", "", ""
        try:
            from xpra.build_info import BUILD_DATE as cl_date, REVISION as cl_rev, LOCAL_MODIFICATIONS as cl_ch
        except:
            pass

        def getcap(*names):
            for x in names:
                v = scaps.get(x)
                if v:
                    return v
            return "unknown"

        tb.new_row("Revision", label(cl_rev),
                   label(self.client._remote_revision or "unknown"))
        tb.new_row(
            "Local Changes", label(cl_ch),
            label(getcap("local_modifications", "build.local_modifications")))
        tb.new_row("Build date", label(cl_date),
                   label(getcap("build_date", "build.date")))

        def make_version_str(version):
            if version and type(version) in (tuple, list):
                version = ".".join([str(x) for x in version])
            return version or "unknown"

        def server_version_info(*names):
            return make_version_str(getcap(*names))

        def client_version_info(prop_name):
            info = "unknown"
            if hasattr(gtk, prop_name):
                info = make_version_str(getattr(gtk, prop_name))
            return info

        if is_gtk3():
            tb.new_row("PyGobject", label(gobject._version))
            tb.new_row("Client GDK", label(gdk._version))
            tb.new_row(
                "GTK", label(gtk._version),
                label(server_version_info("gtk_version",
                                          "server.gtk.version")))
        else:
            tb.new_row(
                "PyGTK", label(client_version_info("pygtk_version")),
                label(
                    server_version_info("pygtk_version",
                                        "server.pygtk.version")))
            tb.new_row(
                "GTK", label(client_version_info("gtk_version")),
                label(server_version_info("gtk_version",
                                          "server.gtk.version")))
        tb.new_row("Python", label(platform.python_version()),
                   label(server_version_info("python_version")))
        cl_gst_v, cl_pygst_v = "", ""
        if HAS_SOUND:
            try:
                from xpra.sound.gstreamer_util import gst_version as cl_gst_v, pygst_version as cl_pygst_v
            except:
                pass
        tb.new_row("GStreamer", label(make_version_str(cl_gst_v)),
                   label(server_version_info("gst_version")))
        tb.new_row("pygst", label(make_version_str(cl_pygst_v)),
                   label(server_version_info("pygst_version")))
        tb.new_row(
            "OpenGL",
            label(
                make_version_str(self.client.opengl_props.get("opengl",
                                                              "n/a"))),
            label("n/a"))
        tb.new_row(
            "OpenGL Vendor",
            label(make_version_str(self.client.opengl_props.get("vendor",
                                                                ""))),
            label("n/a"))
        tb.new_row(
            "PyOpenGL",
            label(
                make_version_str(
                    self.client.opengl_props.get("pyopengl", "n/a"))),
            label("n/a"))

        # Features Table:
        tb = self.table_tab("features.png", "Features", self.populate_features)
        randr_box = gtk.HBox(False, 20)
        self.server_randr_label = label()
        self.server_randr_icon = gtk.Image()
        randr_box.add(self.server_randr_icon)
        randr_box.add(self.server_randr_label)
        tb.new_row("RandR Support", randr_box)
        opengl_box = gtk.HBox(False, 20)
        self.server_opengl_label = label()
        self.server_opengl_icon = gtk.Image()
        opengl_box.add(self.server_opengl_icon)
        opengl_box.add(self.server_opengl_label)
        tb.new_row("Client OpenGL", opengl_box)
        self.server_encodings_label = label()
        tb.new_row("Server Encodings", self.server_encodings_label)
        self.client_encodings_label = label()
        tb.new_row("Client Encodings", self.client_encodings_label)
        self.server_mmap_icon = gtk.Image()
        tb.new_row("Memory Mapped Transfers", self.server_mmap_icon)
        self.server_clipboard_icon = gtk.Image()
        tb.new_row("Clipboard", self.server_clipboard_icon)
        self.server_notifications_icon = gtk.Image()
        tb.new_row("Notification Forwarding", self.server_notifications_icon)
        self.server_bell_icon = gtk.Image()
        tb.new_row("Bell Forwarding", self.server_bell_icon)
        self.server_cursors_icon = gtk.Image()
        tb.new_row("Cursor Forwarding", self.server_cursors_icon)
        speaker_box = gtk.HBox(False, 20)
        self.server_speaker_icon = gtk.Image()
        speaker_box.add(self.server_speaker_icon)
        self.speaker_codec_label = label()
        speaker_box.add(self.speaker_codec_label)
        tb.new_row("Speaker Forwarding", speaker_box)
        self.server_speaker_codecs_label = label()
        tb.new_row("Server Codecs", self.server_speaker_codecs_label)
        self.client_speaker_codecs_label = label()
        tb.new_row("Client Codecs", self.client_speaker_codecs_label)
        microphone_box = gtk.HBox(False, 20)
        self.server_microphone_icon = gtk.Image()
        microphone_box.add(self.server_microphone_icon)
        self.microphone_codec_label = label()
        microphone_box.add(self.microphone_codec_label)
        tb.new_row("Microphone Forwarding", microphone_box)
        self.server_microphone_codecs_label = label()
        tb.new_row("Server Codecs", self.server_microphone_codecs_label)
        self.client_microphone_codecs_label = label()
        tb.new_row("Client Codecs", self.client_microphone_codecs_label)

        # Connection Table:
        tb = self.table_tab("connect.png", "Connection",
                            self.populate_connection)
        tb.new_row("Server Endpoint", label(self.connection.target))
        if self.client.server_display:
            tb.new_row("Server Display", label(self.client.server_display))
        if "hostname" in scaps:
            tb.new_row("Server Hostname", label(scaps.get("hostname")))
        if self.client.server_platform:
            tb.new_row("Server Platform", label(self.client.server_platform))
        self.server_load_label = label()
        tb.new_row("Server Load",
                   self.server_load_label,
                   label_tooltip="Average over 1, 5 and 15 minutes")
        self.session_started_label = label()
        tb.new_row("Session Started", self.session_started_label)
        self.session_connected_label = label()
        tb.new_row("Session Connected", self.session_connected_label)
        self.input_packets_label = label()
        tb.new_row("Packets Received", self.input_packets_label)
        self.input_bytes_label = label()
        tb.new_row("Bytes Received", self.input_bytes_label)
        self.output_packets_label = label()
        tb.new_row("Packets Sent", self.output_packets_label)
        self.output_bytes_label = label()
        tb.new_row("Bytes Sent", self.output_bytes_label)
        self.compression_label = label()
        tb.new_row("Compression Level", self.compression_label)
        self.connection_type_label = label()
        tb.new_row("Connection Type", self.connection_type_label)
        self.input_encryption_label = label()
        tb.new_row("Input Encryption", self.input_encryption_label)
        self.output_encryption_label = label()
        tb.new_row("Output Encryption", self.output_encryption_label)

        # Details:
        tb = self.table_tab("browse.png", "Statistics",
                            self.populate_statistics)
        tb.widget_xalign = 1.0
        tb.attach(title_box(""), 0, xoptions=gtk.EXPAND | gtk.FILL, xpadding=0)
        tb.attach(title_box("Latest"),
                  1,
                  xoptions=gtk.EXPAND | gtk.FILL,
                  xpadding=0)
        tb.attach(title_box("Minimum"),
                  2,
                  xoptions=gtk.EXPAND | gtk.FILL,
                  xpadding=0)
        tb.attach(title_box("Average"),
                  3,
                  xoptions=gtk.EXPAND | gtk.FILL,
                  xpadding=0)
        tb.attach(title_box("90 percentile"),
                  4,
                  xoptions=gtk.EXPAND | gtk.FILL,
                  xpadding=0)
        tb.attach(title_box("Maximum"),
                  5,
                  xoptions=gtk.EXPAND | gtk.FILL,
                  xpadding=0)
        tb.inc()

        def maths_labels():
            return label(), label(), label(), label(), label()

        self.server_latency_labels = maths_labels()
        tb.add_row(label("Server Latency (ms)"), *self.server_latency_labels)
        self.client_latency_labels = maths_labels()
        tb.add_row(label("Client Latency (ms)"), *self.client_latency_labels)
        if self.client.windows_enabled:
            if self.client.server_info_request:
                self.batch_labels = maths_labels()
                tb.add_row(label("Batch Delay (ms)"), *self.batch_labels)
                self.damage_labels = maths_labels()
                tb.add_row(label("Damage Latency (ms)"), *self.damage_labels)

            self.decoding_labels = maths_labels()
            tb.add_row(label("Decoding Latency (ms)"), *self.decoding_labels)
            self.regions_per_second_labels = maths_labels()
            tb.add_row(label("Regions/s"), *self.regions_per_second_labels)
            self.regions_sizes_labels = maths_labels()
            tb.add_row(label("Pixels/region"), *self.regions_sizes_labels)
            self.pixels_per_second_labels = maths_labels()
            tb.add_row(label("Pixels/s"), *self.pixels_per_second_labels)

            self.windows_managed_label = label()
            tb.new_row("Regular Windows", self.windows_managed_label),
            self.transient_managed_label = label()
            tb.new_row("Transient Windows", self.transient_managed_label),
            self.trays_managed_label = label()
            tb.new_row("Trays Managed", self.trays_managed_label),
            if self.client.opengl_enabled:
                self.opengl_label = label()
                tb.new_row("OpenGL Windows", self.opengl_label),

        self.graph_box = gtk.VBox(False, 10)
        self.add_tab("statistics.png", "Graphs", self.populate_graphs,
                     self.graph_box)
        bandwidth_label = "Number of bytes measured by the networks sockets"
        if SHOW_PIXEL_STATS:
            bandwidth_label += ",\nand number of pixels rendered"
        self.bandwidth_graph = self.add_graph_button(bandwidth_label,
                                                     self.save_graphs)
        self.latency_graph = self.add_graph_button(
            "The time it takes to send an echo packet and get the reply",
            self.save_graphs)
        self.pixel_in_data = maxdeque(N_SAMPLES + 4)
        self.net_in_bytecount = maxdeque(N_SAMPLES + 4)
        self.net_out_bytecount = maxdeque(N_SAMPLES + 4)

        self.set_border_width(15)
        self.add(self.tab_box)
        if not is_gtk3():
            self.set_geometry_hints(self.tab_box)

        def window_deleted(*args):
            self.is_closed = True

        self.connect('delete_event', window_deleted)
        self.show_tab(self.tabs[0][1])
        self.set_size_request(-1, 480)
        self.populate()
        self.populate_all()
        gobject.timeout_add(1000, self.populate)
        gobject.timeout_add(100, self.populate_tab)
        self.connect("realize", self.populate_graphs)
        add_close_accel(self, self.destroy)
Exemplo n.º 6
0
 def maths_labels():
     return label(), label(), label(), label(), label()