Example #1
0
    def _doLayout(self, modeChoices):
        """Do dialog layout"""

        self.pagesizer = wx.BoxSizer(wx.VERTICAL)

        # dbInfo
        databasebox = wx.StaticBox(parent=self.panel,
                                   id=wx.ID_ANY,
                                   label=" %s " % _("Database connection"))
        databaseboxsizer = wx.StaticBoxSizer(databasebox, wx.VERTICAL)
        databaseboxsizer.Add(item=CreateDbInfoDesc(self.panel,
                                                   self.dbInfo,
                                                   layer=self.layer),
                             proportion=1,
                             flag=wx.EXPAND | wx.ALL,
                             border=3)

        #
        # text areas
        #
        # sql box
        sqlbox = wx.StaticBox(parent=self.panel,
                              id=wx.ID_ANY,
                              label=" %s " % _("Query"))
        sqlboxsizer = wx.StaticBoxSizer(sqlbox, wx.VERTICAL)

        self.text_sql = wx.TextCtrl(parent=self.panel,
                                    id=wx.ID_ANY,
                                    value='',
                                    size=(-1, 50),
                                    style=wx.TE_MULTILINE)

        self.text_sql.SetInsertionPointEnd()
        wx.CallAfter(self.text_sql.SetFocus)

        sqlboxsizer.Add(item=self.text_sql, flag=wx.EXPAND)

        #
        # buttons
        #
        self.btn_clear = wx.Button(parent=self.panel, id=wx.ID_CLEAR)
        self.btn_clear.SetToolTipString(_("Set SQL statement to default"))
        self.btn_apply = wx.Button(parent=self.panel, id=wx.ID_APPLY)
        self.btn_apply.SetToolTipString(
            _("Apply SQL statement in Attribute Table Manager"))
        self.btn_close = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
        self.btn_close.SetToolTipString(_("Close the dialog"))

        self.btn_logic = {
            'is': [
                '=',
            ],
            'isnot': [
                '!=',
            ],
            'like': [
                'LIKE',
            ],
            'gt': [
                '>',
            ],
            'ge': [
                '>=',
            ],
            'lt': [
                '<',
            ],
            'le': [
                '<=',
            ],
            'or': [
                'OR',
            ],
            'not': [
                'NOT',
            ],
            'and': [
                'AND',
            ],
            'brac': [
                '()',
            ],
            'prc': [
                '%',
            ]
        }

        self.btn_logicpanel = wx.Panel(parent=self.panel, id=wx.ID_ANY)
        for key, value in self.btn_logic.iteritems():
            btn = wx.Button(parent=self.btn_logicpanel,
                            id=wx.ID_ANY,
                            label=value[0])
            self.btn_logic[key].append(btn.GetId())

        self.buttonsizer = wx.FlexGridSizer(cols=4, hgap=5, vgap=5)
        self.buttonsizer.Add(item=self.btn_clear)
        self.buttonsizer.Add(item=self.btn_apply)
        self.buttonsizer.Add(item=self.btn_close)

        btn_logicsizer = wx.GridBagSizer(5, 5)
        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['is'][1]),
                           pos=(0, 0))
        btn_logicsizer.Add(item=self.FindWindowById(
            self.btn_logic['isnot'][1]),
                           pos=(1, 0))
        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['like'][1]),
                           pos=(2, 0))

        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['gt'][1]),
                           pos=(0, 1))
        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['ge'][1]),
                           pos=(1, 1))
        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['or'][1]),
                           pos=(2, 1))

        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['lt'][1]),
                           pos=(0, 2))
        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['le'][1]),
                           pos=(1, 2))
        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['not'][1]),
                           pos=(2, 2))

        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['brac'][1]),
                           pos=(0, 3))
        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['prc'][1]),
                           pos=(1, 3))
        btn_logicsizer.Add(item=self.FindWindowById(self.btn_logic['and'][1]),
                           pos=(2, 3))

        self.btn_logicpanel.SetSizer(btn_logicsizer)

        #
        # list boxes (columns, values)
        #
        self.hsizer = wx.BoxSizer(wx.HORIZONTAL)

        columnsbox = wx.StaticBox(parent=self.panel,
                                  id=wx.ID_ANY,
                                  label=" %s " % _("Columns"))
        columnsizer = wx.StaticBoxSizer(columnsbox, wx.VERTICAL)
        self.list_columns = wx.ListBox(parent=self.panel,
                                       id=wx.ID_ANY,
                                       choices=self.dbInfo.GetColumns(
                                           self.tablename),
                                       style=wx.LB_MULTIPLE)
        columnsizer.Add(item=self.list_columns, proportion=1, flag=wx.EXPAND)

        modesizer = wx.BoxSizer(wx.VERTICAL)

        self.mode = wx.RadioBox(parent=self.panel,
                                id=wx.ID_ANY,
                                label=" %s " % _("Interactive insertion"),
                                choices=modeChoices,
                                style=wx.RA_SPECIFY_COLS,
                                majorDimension=1)

        self.mode.SetSelection(1)  # default 'values'
        modesizer.Add(item=self.mode,
                      proportion=1,
                      flag=wx.ALIGN_CENTER_HORIZONTAL | wx.EXPAND,
                      border=5)

        # self.list_columns.SetMinSize((-1,130))
        # self.list_values.SetMinSize((-1,100))

        self.valuespanel = wx.Panel(parent=self.panel, id=wx.ID_ANY)
        valuesbox = wx.StaticBox(parent=self.valuespanel,
                                 id=wx.ID_ANY,
                                 label=" %s " % _("Values"))
        valuesizer = wx.StaticBoxSizer(valuesbox, wx.VERTICAL)
        self.list_values = wx.ListBox(parent=self.valuespanel,
                                      id=wx.ID_ANY,
                                      choices=self.colvalues,
                                      style=wx.LB_MULTIPLE)
        valuesizer.Add(item=self.list_values, proportion=1, flag=wx.EXPAND)
        self.valuespanel.SetSizer(valuesizer)

        self.btn_unique = wx.Button(parent=self.valuespanel,
                                    id=wx.ID_ANY,
                                    label=_("Get all values"))
        self.btn_unique.Enable(False)
        self.btn_uniquesample = wx.Button(parent=self.valuespanel,
                                          id=wx.ID_ANY,
                                          label=_("Get sample"))
        self.btn_uniquesample.SetToolTipString(
            _("Get first 256 unique values as sample"))
        self.btn_uniquesample.Enable(False)

        buttonsizer3 = wx.BoxSizer(wx.HORIZONTAL)
        buttonsizer3.Add(item=self.btn_uniquesample,
                         proportion=0,
                         flag=wx.ALIGN_CENTER_HORIZONTAL | wx.RIGHT,
                         border=5)
        buttonsizer3.Add(item=self.btn_unique,
                         proportion=0,
                         flag=wx.ALIGN_CENTER_HORIZONTAL)

        valuesizer.Add(item=buttonsizer3, proportion=0, flag=wx.TOP, border=5)

        # go to
        gotosizer = wx.BoxSizer(wx.HORIZONTAL)
        self.goto = wx.TextCtrl(parent=self.valuespanel,
                                id=wx.ID_ANY,
                                style=wx.TE_PROCESS_ENTER)
        gotosizer.Add(item=wx.StaticText(parent=self.valuespanel,
                                         id=wx.ID_ANY,
                                         label=_("Go to:")),
                      proportion=0,
                      flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT,
                      border=5)
        gotosizer.Add(item=self.goto, proportion=1, flag=wx.EXPAND)
        valuesizer.Add(item=gotosizer,
                       proportion=0,
                       flag=wx.ALL | wx.EXPAND,
                       border=5)

        self.hsizer.Add(item=columnsizer, proportion=1, flag=wx.EXPAND)
        self.hsizer.Add(item=self.valuespanel, proportion=1, flag=wx.EXPAND)

        self.close_onapply = wx.CheckBox(parent=self.panel,
                                         id=wx.ID_ANY,
                                         label=_("Close dialog on apply"))
        self.close_onapply.SetValue(True)

        self.pagesizer.Add(item=databaseboxsizer,
                           flag=wx.ALL | wx.EXPAND,
                           border=5)
        self.pagesizer.Add(item=modesizer,
                           proportion=0,
                           flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
                           border=5)
        self.pagesizer.Add(item=self.hsizer,
                           proportion=1,
                           flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
                           border=5)
        # self.pagesizer.Add(self.btn_uniqe,0,wx.ALIGN_LEFT|wx.TOP,border=5)
        # self.pagesizer.Add(self.btn_uniqesample,0,wx.ALIGN_LEFT|wx.TOP,border=5)
        self.pagesizer.Add(item=self.btn_logicpanel,
                           proportion=0,
                           flag=wx.ALIGN_CENTER_HORIZONTAL)
        self.pagesizer.Add(item=sqlboxsizer,
                           proportion=0,
                           flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
                           border=5)
        self.pagesizer.Add(item=self.buttonsizer,
                           proportion=0,
                           flag=wx.ALIGN_RIGHT | wx.ALL,
                           border=5)
        self.pagesizer.Add(item=self.close_onapply,
                           proportion=0,
                           flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
                           border=5)

        #
        # bindings
        #
        self.mode.Bind(wx.EVT_RADIOBOX, self.OnMode)
        #self.text_sql.Bind(wx.EVT_ACTIVATE, self.OnTextSqlActivate)TODO

        self.btn_unique.Bind(wx.EVT_BUTTON, self.OnUniqueValues)
        self.btn_uniquesample.Bind(wx.EVT_BUTTON, self.OnSampleValues)

        for key, value in self.btn_logic.iteritems():
            self.FindWindowById(value[1]).Bind(wx.EVT_BUTTON, self.OnAddMark)

        self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose)
        self.btn_clear.Bind(wx.EVT_BUTTON, self.OnClear)
        self.btn_apply.Bind(wx.EVT_BUTTON, self.OnApply)

        self.list_columns.Bind(wx.EVT_LISTBOX, self.OnAddColumn)
        self.list_values.Bind(wx.EVT_LISTBOX, self.OnAddValue)
        self.goto.Bind(wx.EVT_TEXT, self.OnGoTo)
        self.goto.Bind(wx.EVT_TEXT_ENTER, self.OnAddValue)

        self.panel.SetAutoLayout(True)
        self.panel.SetSizer(self.pagesizer)
        self.pagesizer.Fit(self.panel)

        self.Layout()
        self.SetMinSize((400, 600))
        self.SetClientSize(self.panel.GetSize())
        self.CenterOnParent()
Example #2
0
    def _doLayout(self, modeChoices, showDbInfo=False):
        """Do dialog layout"""

        self.pagesizer = wx.BoxSizer(wx.VERTICAL)

        # dbInfo
        if showDbInfo:
            databasebox = StaticBox(parent=self.panel,
                                    id=wx.ID_ANY,
                                    label=" %s " % _("Database connection"))
            databaseboxsizer = wx.StaticBoxSizer(databasebox, wx.VERTICAL)
            databaseboxsizer.Add(
                CreateDbInfoDesc(self.panel, self.dbInfo, layer=self.layer),
                proportion=1,
                flag=wx.EXPAND | wx.ALL,
                border=3,
            )

        #
        # text areas
        #
        # sql box
        sqlbox = StaticBox(parent=self.panel,
                           id=wx.ID_ANY,
                           label=" %s " % _("Query"))
        sqlboxsizer = wx.StaticBoxSizer(sqlbox, wx.VERTICAL)

        self.text_sql = TextCtrl(
            parent=self.panel,
            id=wx.ID_ANY,
            value="",
            size=(-1, 50),
            style=wx.TE_MULTILINE,
        )

        self.text_sql.SetInsertionPointEnd()
        wx.CallAfter(self.text_sql.SetFocus)

        sqlboxsizer.Add(self.text_sql, flag=wx.EXPAND)

        #
        # buttons
        #
        self.btn_clear = ClearButton(parent=self.panel)
        self.btn_clear.SetToolTip(_("Set SQL statement to default"))
        self.btn_apply = ApplyButton(parent=self.panel)
        self.btn_apply.SetToolTip(_("Apply SQL statement"))
        self.btn_close = CloseButton(parent=self.panel)
        self.btn_close.SetToolTip(_("Close the dialog"))

        self.btn_logic = {
            "is": [
                "=",
            ],
            "isnot": [
                "!=",
            ],
            "like": [
                "LIKE",
            ],
            "gt": [
                ">",
            ],
            "ge": [
                ">=",
            ],
            "lt": [
                "<",
            ],
            "le": [
                "<=",
            ],
            "or": [
                "OR",
            ],
            "not": [
                "NOT",
            ],
            "and": [
                "AND",
            ],
            "brac": [
                "()",
            ],
            "prc": [
                "%",
            ],
        }

        self.btn_logicpanel = wx.Panel(parent=self.panel, id=wx.ID_ANY)
        for key, value in six.iteritems(self.btn_logic):
            btn = Button(parent=self.btn_logicpanel,
                         id=wx.ID_ANY,
                         label=value[0])
            self.btn_logic[key].append(btn.GetId())

        self.buttonsizer = wx.FlexGridSizer(cols=4, hgap=5, vgap=5)
        self.buttonsizer.Add(self.btn_clear)
        self.buttonsizer.Add(self.btn_apply)
        self.buttonsizer.Add(self.btn_close)

        btn_logicsizer = wx.GridBagSizer(5, 5)
        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["is"][1]),
                           pos=(0, 0))
        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["isnot"][1]),
                           pos=(1, 0))
        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["like"][1]),
                           pos=(2, 0))

        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["gt"][1]),
                           pos=(0, 1))
        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["ge"][1]),
                           pos=(1, 1))
        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["or"][1]),
                           pos=(2, 1))

        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["lt"][1]),
                           pos=(0, 2))
        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["le"][1]),
                           pos=(1, 2))
        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["not"][1]),
                           pos=(2, 2))

        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["brac"][1]),
                           pos=(0, 3))
        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["prc"][1]),
                           pos=(1, 3))
        btn_logicsizer.Add(self.FindWindowById(self.btn_logic["and"][1]),
                           pos=(2, 3))

        self.btn_logicpanel.SetSizer(btn_logicsizer)

        #
        # list boxes (columns, values)
        #
        self.hsizer = wx.BoxSizer(wx.HORIZONTAL)

        columnsbox = StaticBox(parent=self.panel,
                               id=wx.ID_ANY,
                               label=" %s " % _("Columns"))
        columnsizer = wx.StaticBoxSizer(columnsbox, wx.VERTICAL)
        self.list_columns = wx.ListBox(
            parent=self.panel,
            id=wx.ID_ANY,
            choices=self.dbInfo.GetColumns(self.tablename),
            style=wx.LB_MULTIPLE,
        )
        columnsizer.Add(self.list_columns, proportion=1, flag=wx.EXPAND)

        if modeChoices:
            modesizer = wx.BoxSizer(wx.VERTICAL)

            self.mode = wx.RadioBox(
                parent=self.panel,
                id=wx.ID_ANY,
                label=" %s " % _("Interactive insertion"),
                choices=modeChoices,
                style=wx.RA_SPECIFY_COLS,
                majorDimension=1,
            )

            self.mode.SetSelection(1)  # default 'values'
            modesizer.Add(self.mode, proportion=1, flag=wx.EXPAND, border=5)

        # self.list_columns.SetMinSize((-1,130))
        # self.list_values.SetMinSize((-1,100))

        self.valuespanel = wx.Panel(parent=self.panel, id=wx.ID_ANY)
        valuesbox = StaticBox(parent=self.valuespanel,
                              id=wx.ID_ANY,
                              label=" %s " % _("Values"))
        valuesizer = wx.StaticBoxSizer(valuesbox, wx.VERTICAL)
        self.list_values = wx.ListBox(
            parent=self.valuespanel,
            id=wx.ID_ANY,
            choices=self.colvalues,
            style=wx.LB_MULTIPLE,
        )
        valuesizer.Add(self.list_values, proportion=1, flag=wx.EXPAND)
        self.valuespanel.SetSizer(valuesizer)

        self.btn_unique = Button(parent=self.valuespanel,
                                 id=wx.ID_ANY,
                                 label=_("Get all values"))
        self.btn_unique.Enable(False)
        self.btn_uniquesample = Button(parent=self.valuespanel,
                                       id=wx.ID_ANY,
                                       label=_("Get sample"))
        self.btn_uniquesample.SetToolTip(
            _("Get first 256 unique values as sample"))
        self.btn_uniquesample.Enable(False)

        buttonsizer3 = wx.BoxSizer(wx.HORIZONTAL)
        buttonsizer3.Add(self.btn_uniquesample,
                         proportion=0,
                         flag=wx.RIGHT,
                         border=5)
        buttonsizer3.Add(self.btn_unique, proportion=0)

        valuesizer.Add(buttonsizer3, proportion=0, flag=wx.TOP, border=5)

        # go to
        gotosizer = wx.BoxSizer(wx.HORIZONTAL)
        self.goto = TextCtrl(parent=self.valuespanel,
                             id=wx.ID_ANY,
                             style=wx.TE_PROCESS_ENTER)
        gotosizer.Add(
            StaticText(parent=self.valuespanel,
                       id=wx.ID_ANY,
                       label=_("Go to:")),
            proportion=0,
            flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT,
            border=5,
        )
        gotosizer.Add(self.goto, proportion=1, flag=wx.EXPAND)
        valuesizer.Add(gotosizer,
                       proportion=0,
                       flag=wx.ALL | wx.EXPAND,
                       border=5)

        self.hsizer.Add(columnsizer, proportion=1, flag=wx.EXPAND)
        self.hsizer.Add(self.valuespanel, proportion=1, flag=wx.EXPAND)

        self.close_onapply = wx.CheckBox(parent=self.panel,
                                         id=wx.ID_ANY,
                                         label=_("Close dialog on apply"))
        self.close_onapply.SetValue(True)

        if showDbInfo:
            self.pagesizer.Add(databaseboxsizer,
                               flag=wx.ALL | wx.EXPAND,
                               border=5)
        if modeChoices:
            self.pagesizer.Add(
                modesizer,
                proportion=0,
                flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
                border=5,
            )
        self.pagesizer.Add(
            self.hsizer,
            proportion=1,
            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
            border=5,
        )
        # self.pagesizer.Add(self.btn_uniqe,0,wx.ALIGN_LEFT|wx.TOP,border=5)
        # self.pagesizer.Add(self.btn_uniqesample,0,wx.ALIGN_LEFT|wx.TOP,border=5)
        self.pagesizer.Add(self.btn_logicpanel,
                           proportion=0,
                           flag=wx.ALIGN_CENTER_HORIZONTAL)
        self.pagesizer.Add(sqlboxsizer,
                           proportion=0,
                           flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
                           border=5)
        self.pagesizer.Add(self.buttonsizer,
                           proportion=0,
                           flag=wx.ALIGN_RIGHT | wx.ALL,
                           border=5)
        self.pagesizer.Add(
            self.close_onapply,
            proportion=0,
            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
            border=5,
        )

        #
        # bindings
        #
        if modeChoices:
            self.mode.Bind(wx.EVT_RADIOBOX, self.OnMode)
        # self.text_sql.Bind(wx.EVT_ACTIVATE, self.OnTextSqlActivate)TODO

        self.btn_unique.Bind(wx.EVT_BUTTON, self.OnUniqueValues)
        self.btn_uniquesample.Bind(wx.EVT_BUTTON, self.OnSampleValues)

        for key, value in six.iteritems(self.btn_logic):
            self.FindWindowById(value[1]).Bind(wx.EVT_BUTTON, self.OnAddMark)

        self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose)
        self.btn_clear.Bind(wx.EVT_BUTTON, self.OnClear)
        self.btn_apply.Bind(wx.EVT_BUTTON, self.OnApply)

        self.list_columns.Bind(wx.EVT_LISTBOX, self.OnAddColumn)
        self.list_values.Bind(wx.EVT_LISTBOX, self.OnAddValue)
        self.goto.Bind(wx.EVT_TEXT, self.OnGoTo)
        self.goto.Bind(wx.EVT_TEXT_ENTER, self.OnAddValue)