1
2
3
4
5
6
7 import wx
8
9
10 import gettext
11
12
13
14 from Gnumed.wxpython import gmPhraseWheel
15 from Gnumed.wxpython.gmDataMiningWidgets import cPatientListingCtrl
16
17
18
21
22 kwds["style"] = wx.NO_BORDER | wx.TAB_TRAVERSAL
23 wx.ScrolledWindow.__init__(self, *args, **kwds)
24 self._splitter = wx.SplitterWindow(self, wx.ID_ANY, style=wx.SP_3D | wx.SP_BORDER)
25 self.splitter_top_panel = wx.Panel(self._splitter, wx.ID_ANY, style=wx.NO_BORDER | wx.TAB_TRAVERSAL)
26 self._PRW_report_name = gmPhraseWheel.cPhraseWheel(self.splitter_top_panel, wx.ID_ANY, "", style=wx.NO_BORDER)
27 self._TCTRL_query = wx.TextCtrl(self.splitter_top_panel, wx.ID_ANY, "", style=wx.TE_MULTILINE | wx.TE_WORDWRAP | wx.NO_BORDER)
28 self._BTN_run = wx.Button(self.splitter_top_panel, wx.ID_ANY, _("Run"), style=wx.BU_EXACTFIT)
29 self._BTN_clear = wx.Button(self.splitter_top_panel, wx.ID_ANY, _("Clear"), style=wx.BU_EXACTFIT)
30 self._BTN_save = wx.Button(self.splitter_top_panel, wx.ID_ANY, _("Save"), style=wx.BU_EXACTFIT)
31 self._BTN_delete = wx.Button(self.splitter_top_panel, wx.ID_ANY, _("Delete"), style=wx.BU_EXACTFIT)
32 self._BTN_contribute = wx.Button(self.splitter_top_panel, wx.ID_ANY, _("Contribute"), style=wx.BU_EXACTFIT)
33 self._BTN_visualize = wx.Button(self.splitter_top_panel, wx.ID_ANY, _("Plot"), style=wx.BU_EXACTFIT)
34 self._BTN_waiting_list = wx.Button(self.splitter_top_panel, wx.ID_ANY, _("Wait.List"), style=wx.BU_EXACTFIT)
35 self._BTN_schema = wx.Button(self.splitter_top_panel, wx.ID_ANY, _("Schema"), style=wx.BU_EXACTFIT)
36 self._splitter_bottom_panel = wx.Panel(self._splitter, wx.ID_ANY, style=wx.NO_BORDER | wx.TAB_TRAVERSAL)
37 self._LCTRL_result = cPatientListingCtrl(self._splitter_bottom_panel, wx.ID_ANY, style=wx.LC_REPORT | wx.LC_SINGLE_SEL | wx.SIMPLE_BORDER)
38
39 self.__set_properties()
40 self.__do_layout()
41
42 self.Bind(wx.EVT_BUTTON, self._on_run_button_pressed, self._BTN_run)
43 self.Bind(wx.EVT_BUTTON, self._on_clear_button_pressed, self._BTN_clear)
44 self.Bind(wx.EVT_BUTTON, self._on_save_button_pressed, self._BTN_save)
45 self.Bind(wx.EVT_BUTTON, self._on_delete_button_pressed, self._BTN_delete)
46 self.Bind(wx.EVT_BUTTON, self._on_contribute_button_pressed, self._BTN_contribute)
47 self.Bind(wx.EVT_BUTTON, self._on_visualize_button_pressed, self._BTN_visualize)
48 self.Bind(wx.EVT_BUTTON, self._on_waiting_list_button_pressed, self._BTN_waiting_list)
49 self.Bind(wx.EVT_BUTTON, self._on_schema_button_pressed, self._BTN_schema)
50
51
53
54 self.SetScrollRate(10, 10)
55 self._PRW_report_name.SetToolTipString(_("If you want to save this query into the database for later use you must provide a descriptive label for it here."))
56 self._TCTRL_query.SetToolTipString(_("Enter the SQL commands to run here. It doesn't matter whether or not you enter a trailing \";\".\n\nNote that:\n- the query is run in a read-only transaction\n- the result list will be artificially limited to the first 1000 rows\n- you can include a column named \"pk_patient\" to make the result rows activate the corresponding patient on double-clicking"))
57 self._BTN_run.SetToolTipString(_("Run the query and present the results below."))
58 self._BTN_run.SetDefault()
59 self._BTN_clear.SetToolTipString(_("Clear all fields."))
60 self._BTN_save.SetToolTipString(_("Save the report definition."))
61 self._BTN_delete.SetToolTipString(_("Delete this report definition."))
62 self._BTN_contribute.SetToolTipString(_("Contribute this report definition to the GNUmed community. The report name and SQL command will be sent to the mailing list.\n\nPatient data will NOT be put AT RISK.\n\nYou may want to be careful about the SQL itself as it just might contain bits of sensitive data in, say, the WHERE conditions."))
63 self._BTN_visualize.SetToolTipString(_("Visualize (plot) data from two numeric columns of the result list below."))
64 self._BTN_visualize.Enable(False)
65 self._BTN_waiting_list.SetToolTipString(_("Put all or selected results onto a waiting list."))
66 self._BTN_waiting_list.Enable(False)
67 self._BTN_schema.SetToolTipString(_("Show the database schema definition in your web browser."))
68
69
71
72 _szr_main = wx.BoxSizer(wx.VERTICAL)
73 __szr_splitter_bottom = wx.BoxSizer(wx.VERTICAL)
74 _fgszr_top = wx.FlexGridSizer(3, 2, 1, 4)
75 _szr_buttons = wx.BoxSizer(wx.HORIZONTAL)
76 __LBL_report_name = wx.StaticText(self.splitter_top_panel, wx.ID_ANY, _("Report"))
77 _fgszr_top.Add(__LBL_report_name, 0, wx.ALIGN_CENTER_VERTICAL, 0)
78 _fgszr_top.Add(self._PRW_report_name, 0, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL, 0)
79 __LBL_query = wx.StaticText(self.splitter_top_panel, wx.ID_ANY, _("\nCommand\n(SQL)"))
80 _fgszr_top.Add(__LBL_query, 0, wx.ALIGN_CENTER_VERTICAL, 0)
81 _fgszr_top.Add(self._TCTRL_query, 0, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL, 0)
82 _fgszr_top.Add((20, 20), 0, wx.EXPAND, 0)
83 _szr_buttons.Add(self._BTN_run, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)
84 _szr_buttons.Add(self._BTN_clear, 0, wx.RIGHT | wx.EXPAND | wx.ALIGN_CENTER_VERTICAL, 3)
85 _szr_buttons.Add(self._BTN_save, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)
86 _szr_buttons.Add(self._BTN_delete, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)
87 _szr_buttons.Add(self._BTN_contribute, 0, wx.ALIGN_CENTER_VERTICAL, 0)
88 _szr_buttons.Add((20, 20), 1, wx.EXPAND, 0)
89 _LBL_results = wx.StaticText(self.splitter_top_panel, wx.ID_ANY, _("Results:"))
90 _szr_buttons.Add(_LBL_results, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)
91 _szr_buttons.Add(self._BTN_visualize, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 3)
92 _szr_buttons.Add(self._BTN_waiting_list, 0, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL, 0)
93 _szr_buttons.Add((20, 20), 1, wx.EXPAND, 0)
94 _szr_buttons.Add(self._BTN_schema, 0, wx.ALIGN_CENTER_VERTICAL, 0)
95 _fgszr_top.Add(_szr_buttons, 0, wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL, 0)
96 self.splitter_top_panel.SetSizer(_fgszr_top)
97 _fgszr_top.AddGrowableRow(1)
98 _fgszr_top.AddGrowableCol(1)
99 __szr_splitter_bottom.Add(self._LCTRL_result, 1, wx.EXPAND, 0)
100 self._splitter_bottom_panel.SetSizer(__szr_splitter_bottom)
101 self._splitter.SplitHorizontally(self.splitter_top_panel, self._splitter_bottom_panel, 125)
102 _szr_main.Add(self._splitter, 1, wx.EXPAND, 0)
103 self.SetSizer(_szr_main)
104 _szr_main.Fit(self)
105
106
108 print "Event handler '_on_run_button_pressed' not implemented!"
109 event.Skip()
110
112 print "Event handler '_on_clear_button_pressed' not implemented!"
113 event.Skip()
114
116 print "Event handler '_on_save_button_pressed' not implemented!"
117 event.Skip()
118
120 print "Event handler '_on_delete_button_pressed' not implemented!"
121 event.Skip()
122
124 print "Event handler '_on_contribute_button_pressed' not implemented!"
125 event.Skip()
126
128 print "Event handler '_on_visualize_button_pressed' not implemented!"
129 event.Skip()
130
132 print "Event handler '_on_waiting_list_button_pressed' not implemented!"
133 event.Skip()
134
136 print "Event handler '_on_schema_button_pressed' not implemented!"
137 event.Skip()
138
139
140