Skip to content
xnat_search_gui.py 3.42 KiB
Newer Older
Franziska Koehn's avatar
Franziska Koehn committed
import gtk

class XnatSearchApp(gtk.Window):

    args = None

    def init_connection_fields(self):
Franziska Koehn's avatar
Franziska Koehn committed
        self.vbox_search.host = self.args.host
        self.vbox_search.credentials = self.args.user
Franziska Koehn's avatar
Franziska Koehn committed
    def __init__(self):
        super(XnatSearchApp, self).__init__()

        import argparse
        parser = argparse.ArgumentParser(description='search and download gui')
        parser.add_argument('--host', type=str, help='hostname or ip-address (including port).', default="http://localhost:8080")
        parser.add_argument('--user', type=str, help='user:passw', default=":")
        self.args = parser.parse_args()

        self.set_size_request(1000, 500)
Franziska Koehn's avatar
Franziska Koehn committed
        self.set_position(gtk.WIN_POS_CENTER)

        self.connect("destroy", gtk.main_quit)
        self.set_title("Xnat Search")

        # left side

        vbox_root = gtk.VBox(False, 1)

        hpaned = gtk.HPaned()
        hpaned.set_position(400)
        vbox_root.pack_start(hpaned, True, True, 5)

Franziska Koehn's avatar
Franziska Koehn committed
        def on_search_query(_, host, credentials, root_type, query, labels):
            import xsalogic.datatypereader as type_reader
            import xsalogic.queries as queries
Franziska Koehn's avatar
Franziska Koehn committed
            user, _, passw = credentials.partition(":")
            fields = type_reader.get_fields_from_labels(labels,root_type)
            query_results = queries.search_for(host, 'xnat:mrScanData', query, fields, user, passw)
            queries.HOST = host
Franziska Koehn's avatar
Franziska Koehn committed

Franziska Koehn's avatar
Franziska Koehn committed
            #TODO catch errors
Franziska Koehn's avatar
Franziska Koehn committed

Franziska Koehn's avatar
Franziska Koehn committed
            #httplib.ResponseNotReady
            #one message dialog for all

            if query_results is "DatabaseError":
                md = gtk.MessageDialog(type=gtk.MESSAGE_WARNING,
                                       buttons=gtk.BUTTONS_OK,
                                       message_format="Error! Check your query."
                                       )
                md.run()
                md.destroy()
                self.results = []
            elif query_results is "ServerNotFoundError":
                md = gtk.MessageDialog(type=gtk.MESSAGE_WARNING,
                                       buttons=gtk.BUTTONS_OK,
                                       message_format="Error! Server not found."
                                       )
                md.run()
                md.destroy()
                self.results = []
            else:
                self.results = query_results
            self.vbox_results.show_data(self.results, root_type)
            self.statusbar.push(0, "%s Results"%len(self.results))
            self.chart_view.update_chart(self.results, root_type)
Franziska Koehn's avatar
Franziska Koehn committed

        from xsagtk.query_view import QueryView
Franziska Koehn's avatar
Franziska Koehn committed
        self.vbox_search = QueryView(homogeneous=False, spacing=1)
        self.vbox_search.connect("send-query", on_search_query)
Franziska Koehn's avatar
Franziska Koehn committed

Franziska Koehn's avatar
Franziska Koehn committed
        hpaned.add1(self.vbox_search)
Franziska Koehn's avatar
Franziska Koehn committed

        # right site

        vpaned = gtk.VPaned()
        vpaned.set_position(300)
        hpaned.add2(vpaned)

        from xsagtk.results_view import ResultsDownloadView
Franziska Koehn's avatar
Franziska Koehn committed
        self.vbox_results = ResultsDownloadView(False,1)
        vpaned.add1(self.vbox_results)
Franziska Koehn's avatar
Franziska Koehn committed

Franziska Koehn's avatar
Franziska Koehn committed

        from xsagtk.chart_view import ChartView
        self.chart_view = ChartView()
        vpaned.add2(self.chart_view)
Franziska Koehn's avatar
Franziska Koehn committed

Franziska Koehn's avatar
Franziska Koehn committed
        # statusbar

        self.statusbar = gtk.Statusbar()
        vbox_root.pack_start(self.statusbar, False, False, 0)

        self.add(vbox_root)

        self.init_connection_fields()
Franziska Koehn's avatar
Franziska Koehn committed
        self.show_all()

Franziska Koehn's avatar
Franziska Koehn committed

Franziska Koehn's avatar
Franziska Koehn committed
XnatSearchApp()
Franziska Koehn's avatar
Franziska Koehn committed
gtk.gdk.threads_init()
Franziska Koehn's avatar
Franziska Koehn committed
gtk.main()