Exemple #1
0
 def _reset_watch(self):
     """Resets or initializes the internal GUI representation of the
     MetaWatch to default values. Called on startup during
     initialization."""
     
     self.m_LEDNotice.Hide()
     self.m_vibrateNotice.Hide()
     
     self.m_watchMode.Selection = 0
     self.m_watchMode.Enabled = False
     self.m_manualModeSet.Value = False
     self.clock_offset = relativedelta(0)        
     
     self.parser.watch_reset()
     
     # There is no seperate internal data structure for the watch state,
     # the GUI elements *are* the internal representation. This function
     # essentially resets them to a known state.
     
     self.m_pg.ClearPage(0)  
     self.m_pg.Append(wxpg.PropertyCategory("NVAL Store"))        
     
     # All NVAL values are listed in the protocol_constants module. The
     # property grid is built by parsing that list and applying default
     # values (NVAL properties which have no default value are ignored,
     # they are marked 'reserved' in the protocol documentation).
     
     for value in nval.get_nval_list():
         args, kwargs = ([], {})
         if value.displaytype[0] and value.default:
             dest_type, value_type = value.displaytype
             kwargs = dict(value = value_type(value.default))
         elif isinstance(value.valuetype, list):
             dest_type = wxpg.EnumProperty
             args = (value.valuetype,
                     range(len(value.valuetype)), value.default)
         elif isinstance(value.valuetype, dict):
             dest_type = wxpg.EnumProperty
             args = (value.valuetype.values(),
                     value.valuetype.keys(), value.default)
         else:
             continue
             
         self.m_pg.Append(dest_type(value.name, str("nval_%04X" % value.identifier),
                                    *args, **kwargs))
             
     self.m_pg.Append(wxpg.PropertyCategory("Real Time Clock"))
     self.m_pg.Append(wxpg.DateProperty("Date"))
     self.m_pg.Append(wxpg.StringProperty("Time"))
     
     self.m_pg.SetPropertyAttribute("Date", wxpg.PG_DATE_PICKER_STYLE,
                                      wx.DP_DROPDOWN|wx.DP_SHOWCENTURY)
     
     # Call the timer function once for immediate clock update.
     self.OnClock()
     
     self.logger.info("Initialized watch to default state")
    def _create_dummy_content(self):
        # some dummy content from the wxPython demo
        import wx.propgrid as wxpg
        pg = self.widget
        pg.AddPage( "Page 1 - Dummy" )

        pg.Append( wxpg.PropertyCategory("1 - Basic Properties") )
        pg.Append( wxpg.StringProperty("String",value="Some Text") )

        sp = pg.Append( wxpg.StringProperty('StringProperty w/ Password flag', value='ABadPassword') )
        sp.SetAttribute('Hint', 'This is a hint')
        sp.SetAttribute('Password', True)

        pg.Append( wxpg.IntProperty("Int",value=123) )
        pg.Append( wxpg.FloatProperty("Float",value=123.4) )
        pg.Append( wxpg.BoolProperty("Bool",value=True) )
        pg.Append( wxpg.BoolProperty("Bool_with_Checkbox",value=True) )
        pg.SetPropertyAttribute( "Bool_with_Checkbox", "UseCheckbox", True)
        pg.Append( wxpg.PropertyCategory("2 - More Properties") )
        pg.Append( wxpg.LongStringProperty("LongString", value="This is a\nmulti-line string\nwith\ttabs\nmixed\tin."))
        pg.Append( wxpg.DirProperty("Dir",value=r"C:\Windows") )
        pg.Append( wxpg.FileProperty("File",value=r"C:\Windows\system.ini") )
        pg.Append( wxpg.ArrayStringProperty("ArrayString",value=['A','B','C']) )

        pg.Append( wxpg.EnumProperty("Enum","Enum", ['wxPython Rules', 'wxPython Rocks', 'wxPython Is The Best'],
                                                    [10,11,12], 0) )
        pg.Append( wxpg.EditEnumProperty("EditEnum","EditEnumProperty", ['A','B','C'], [0,1,2], "Text Not in List") )

        pg.Append( wxpg.PropertyCategory("3 - Advanced Properties") )
        pg.Append( wxpg.DateProperty("Date",value=wx.DateTime.Now()) )
        pg.Append( wxpg.FontProperty("Font",value=self.widget.GetFont()) )
        pg.Append( wxpg.ColourProperty("Colour", value=self.widget.GetBackgroundColour()) )
        pg.Append( wxpg.SystemColourProperty("SystemColour") )
        pg.Append( wxpg.ImageFileProperty("ImageFile") )
        pg.Append( wxpg.MultiChoiceProperty("MultiChoice", choices=['wxWidgets','QT','GTK+']) )

        pg.Append( wxpg.PropertyCategory("4 - Additional Properties") )
        pg.Append( wxpg.IntProperty("IntWithSpin",value=256) )
        pg.SetPropertyEditor("IntWithSpin","SpinCtrl")

        pg.SetPropertyAttribute( "File", wxpg.PG_FILE_SHOW_FULL_PATH, 0 )
        pg.SetPropertyAttribute( "File", wxpg.PG_FILE_INITIAL_PATH, r"C:\Program Files\Internet Explorer" )
        if compat.IS_PHOENIX:
            pg.SetPropertyAttribute( "Date", wxpg.PG_DATE_PICKER_STYLE, wx.adv.DP_DROPDOWN|wx.adv.DP_SHOWCENTURY )

        pg.AddPage( "Page 2 - Almost Empty" )
        pg.Append( wxpg.PropertyCategory("1 - Basic Properties") )
        pg.Append( wxpg.StringProperty("String 2",value="Some Text") )
    def _create_plot_properties(self):
        pg = self.property_grid_1
        # pg.AddPage("Page 1 - Plot Settings")  # if pages are needed, use PropertyGridManger instead
        dir_path = os.path.dirname(os.path.realpath(__file__))
        pg.Append(wxpg.PropertyCategory("1 - Basic Properties"))
        pg.Append(wxpg.StringProperty(label="Title", value="Title"))
        pg.Append(wxpg.StringProperty(label="X Label", value="X Label"))
        pg.Append(wxpg.StringProperty(label="Y Label", value="Y Label"))
        pg.Append(wxpg.BoolProperty(label="Grid", value=True))
        pg.SetPropertyAttribute(id="Grid", attrName="UseCheckbox", value=True)

        pg.Append(wxpg.PropertyCategory("2 - Data"))
        # https://discuss.wxpython.org/t/wxpython-pheonix-4-0-2-question-regarding-multichoiceproperty-and-setting-the-selection-of-the-choices/30044
        # https://discuss.wxpython.org/t/how-to-set-propertygrid-values/30152/4
        pg.Append(
            wxpg.EnumProperty(
                label="Scale",
                labels=['Linear', 'SemilogX', 'SemilogY', 'LogLog']))
        pg.Append(
            wxpg.EnumProperty(label="X Data",
                              name="X Data",
                              labels=['NaN'],
                              values=[0]))
        pg.Append(
            wxpg.MultiChoiceProperty(label="Y Data",
                                     name='Y Data',
                                     choices=['NaN'],
                                     value=['NaN']))
        pg.Append(
            wxpg.EnumProperty(label="Data Labels",
                              name="Data Labels",
                              labels=['NaN'],
                              values=[0]))

        pg.Append(wxpg.PropertyCategory("3 - Optional Static Plot Overlay"))
        pg.Append(wxpg.FileProperty(label="Overlay Plot",
                                    value=rf"{dir_path}"))
        pg.Append(wxpg.EnumProperty(label="X Axis Variable", labels=['']))
        pg.Append(wxpg.EnumProperty(label="Y Axis Variable", labels=['']))

        pg.Append(wxpg.PropertyCategory("4 - Advanced Properties"))
        pg.Append(wxpg.ArrayStringProperty(label="xLim", value=['0', '100']))
        pg.Append(wxpg.ArrayStringProperty(label="yLim", value=['0', '100']))
        pg.Append(wxpg.DateProperty(label="Date", value=wx.DateTime.Now()))
        pg.Append(wxpg.ColourProperty(label="Line Colour", value='#1f77b4'))
        pg.Append(wxpg.FontProperty(label="Font", value=self.GetFont()))
        pg.Grid.FitColumns()
    def init_view(self, items, para, preview=False, modal=True, app=None):
        self.para, self.modal = para, modal
        self.pg = pg = wxpg.PropertyGridManager(
            self, style=wxpg.PG_SPLITTER_AUTO_CENTER)

        sizer = wx.BoxSizer(wx.VERTICAL)
        # Show help as tooltips
        pg.SetExtraStyle(wxpg.PG_EX_HELP_AS_TOOLTIPS)
        pg.Bind(wxpg.EVT_PG_CHANGED, self.OnPropGridChange)
        pg.Bind(wxpg.EVT_PG_SELECTED, self.OnPropGridSelect)

        pg.AddPage('')
        for i in items:
            if i[0] == 'lab': pg.Append(wxpg.PropertyCategory(i[2]))
            if i[0] == int:
                pg.Append(wxpg.IntProperty(i[1], value=int(para[i[1]]) or 0))
            if i[0] == float:
                pg.Append(
                    wxpg.FloatProperty(i[1], value=float(para[i[1]]) or 0))
            if i[0] == str:
                pg.Append(wxpg.StringProperty(i[1], value=para[i[1]] or ''))
            if i[0] == 'txt':
                pg.Append(wxpg.LongStringProperty(i[1], value=para[i[1]]
                                                  or ''))
            if i[0] == bool: pg.Append(wxpg.BoolProperty(i[1]))
            if i[0] == 'date':
                pg.Append(wxpg.DateProperty(i[1], value=wx.DateTime.Now()))
            #if i[0] == 'list': pg.Append( wxpg.EnumProperty(i[1], i[1], [i.strip() for i in i[2][1:-1].split(',')]))
            #if i[0] == 'img': pg.Append( wxpg.EnumProperty(v[1], v[1], ['a','b','c']))
            #if i[0] == 'tab': pg.Append( wxpg.EnumProperty(v[1], v[1], ['a','b','c']))

        #if preview:self.add_ctrl_(Check, 'preview', ('preview',), app=app)
        #self.reset(para)
        sizer.Add(pg, 1, wx.EXPAND)
        self.SetSizer(sizer)
        self.add_confirm(modal)
        self.Layout()
        self.Fit()
        wx.Dialog.Bind(self, wx.EVT_WINDOW_DESTROY, self.OnDestroy)
        #wx.Dialog.Bind(self, wx.EVT_IDLE, lambda e: self.reset())
        print('bind close')
Exemple #5
0
	def __init__( self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = wx.Size( 500,395 ), style = wx.TAB_TRAVERSAL, name = wx.EmptyString ):
		wx.Panel.__init__ ( self, parent, id = id, pos = pos, size = size, style = style, name = name )

		bSizer1 = wx.BoxSizer( wx.VERTICAL )

		self.m_propertyGridManager1 = pg.PropertyGridManager(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.propgrid.PG_DESCRIPTION|wx.propgrid.PG_SPLITTER_AUTO_CENTER|wx.propgrid.PG_TOOLBAR|wx.propgrid.PG_TOOLTIPS|wx.TAB_TRAVERSAL)
		self.m_propertyGridManager1.SetExtraStyle( wx.propgrid.PG_EX_AUTO_UNSPECIFIED_VALUES|wx.propgrid.PG_EX_MODE_BUTTONS|wx.propgrid.PG_EX_NO_FLAT_TOOLBAR|wx.propgrid.PG_EX_NO_TOOLBAR_DIVIDER )

		self.m_propertyGridPage1 = self.m_propertyGridManager1.AddPage( u"Page", wx.ArtProvider.GetBitmap( wx.ART_REPORT_VIEW, wx.ART_BUTTON ) );
		self.Item1 = self.m_propertyGridPage1.Append( pg.PropertyCategory( u"Directory of Work", u"Directory of Work" ) )
		self.Item2 = self.m_propertyGridPage1.Append( pg.DirProperty( u"Database and Sql files", u"Database and Sql files" ) )
		self.Item3 = self.m_propertyGridPage1.Append( pg.DirProperty( u"Utility and Plugin", u"Utility and Plugin" ) )
		self.Item4 = self.m_propertyGridPage1.Append( pg.DirProperty( u"Server and Local Network", u"Server and Local Network" ) )
		self.m_propertyGridPage1.SetPropertyHelpString( Item4, u"Directory of Local Network that Database and Main File here and other client get Data from it" )
		self.Item5 = self.m_propertyGridPage1.Append( pg.DirProperty( u"Other and Temp", u"Other and Temp" ) )
		self.Item6 = self.m_propertyGridPage1.Append( pg.PropertyCategory( u"General parameter", u"General parameter" ) )
		self.Item7 = self.m_propertyGridPage1.Append( pg.DateProperty( u"Date of Today ", u"Date of Today " ) )
		self.Item8 = self.m_propertyGridPage1.Append( pg.EnumProperty( u"Language", u"Language" ) )
		self.Item9 = self.m_propertyGridPage1.Append( pg.BoolProperty( u"Show Clock", u"Show Clock" ) )
		self.Item10 = self.m_propertyGridPage1.Append( pg.FontProperty( u"Font", u"Font" ) )
		self.Item11 = self.m_propertyGridPage1.Append( pg.FlagsProperty( u"Size", u"Size" ) )
		self.Item12 = self.m_propertyGridPage1.Append( pg.StringProperty( u"position", u"position" ) )

		self.m_propertyGridPage2 = self.m_propertyGridManager1.AddPage( u"Page", wx.ArtProvider.GetBitmap( wx.ART_LIST_VIEW, wx.ART_TOOLBAR ) );
		self.Item13 = self.m_propertyGridPage2.Append( pg.PropertyCategory( u"Other Status", u"Other Status" ) )
		self.Item14 = self.m_propertyGridPage2.Append( pg.StringProperty( u"Toolbar", u"Toolbar" ) )
		self.Item15 = self.m_propertyGridPage2.Append( pg.StringProperty( u"Pan Input", u"Pan Input" ) )
		self.Item16 = self.m_propertyGridPage2.Append( pg.StringProperty( u"Pan Status", u"Pan Status" ) )
		self.Item17 = self.m_propertyGridPage2.Append( pg.ImageFileProperty( u"Background", u"Background" ) )
		self.Item18 = self.m_propertyGridPage2.Append( pg.CursorProperty( u"Cursor", u"Cursor" ) )
		self.Item19 = self.m_propertyGridPage2.Append( pg.LongStringProperty( u"Help", u"Help" ) )
		bSizer1.Add( self.m_propertyGridManager1, 1, wx.ALL|wx.EXPAND, 5 )


		self.SetSizer( bSizer1 )
		self.Layout()
    def __init__(self, parent, log):
        wx.Panel.__init__(self, parent, wx.ID_ANY)
        self.log = log

        self.panel = panel = wx.Panel(self, wx.ID_ANY)
        topsizer = wx.BoxSizer(wx.VERTICAL)

        # Difference between using PropertyGridManager vs PropertyGrid is that
        # the manager supports multiple pages and a description box.
        self.pg = pg = wxpg.PropertyGridManager(
            panel,
            style=wxpg.PG_SPLITTER_AUTO_CENTER | wxpg.PG_AUTO_SORT
            | wxpg.PG_TOOLBAR)

        # Show help as tooltips
        pg.SetExtraStyle(wxpg.PG_EX_HELP_AS_TOOLTIPS)

        pg.Bind(wxpg.EVT_PG_CHANGED, self.OnPropGridChange)
        pg.Bind(wxpg.EVT_PG_PAGE_CHANGED, self.OnPropGridPageChange)
        pg.Bind(wxpg.EVT_PG_SELECTED, self.OnPropGridSelect)
        pg.Bind(wxpg.EVT_PG_RIGHT_CLICK, self.OnPropGridRightClick)

        #
        # Let's use some simple custom editor
        #
        # NOTE: Editor must be registered *before* adding a property that
        # uses it.
        if not getattr(sys, '_PropGridEditorsRegistered', False):
            pg.RegisterEditor(TrivialPropertyEditor)
            pg.RegisterEditor(SampleMultiButtonEditor)
            pg.RegisterEditor(LargeImageEditor)
            # ensure we only do it once
            sys._PropGridEditorsRegistered = True

        #
        # Add properties
        #

        pg.AddPage("Page 1 - Testing All")

        pg.Append(wxpg.PropertyCategory("1 - Basic Properties"))
        pg.Append(wxpg.StringProperty("String", value="Some Text"))

        sp = pg.Append(
            wxpg.StringProperty('StringProperty w/ Password flag',
                                value='ABadPassword'))
        sp.SetAttribute('Hint', 'This is a hint')
        sp.SetAttribute('Password', True)

        pg.Append(wxpg.IntProperty("Int", value=100))
        pg.Append(wxpg.FloatProperty("Float", value=100.0))
        pg.Append(wxpg.BoolProperty("Bool", value=True))
        boolprop = pg.Append(
            wxpg.BoolProperty("Bool_with_Checkbox", value=True))
        pg.SetPropertyAttribute(
            "Bool_with_Checkbox",  # You can find the property by name,
            #boolprop,               # or give the property object itself.
            "UseCheckbox",
            True)  # The attribute name and value

        pg.Append(wxpg.PropertyCategory("2 - More Properties"))
        pg.Append(
            wxpg.LongStringProperty(
                "LongString",
                value="This is a\nmulti-line string\nwith\ttabs\nmixed\tin."))
        pg.Append(wxpg.DirProperty("Dir", value=r"C:\Windows"))
        pg.Append(wxpg.FileProperty("File", value=r"C:\Windows\system.ini"))
        pg.Append(
            wxpg.ArrayStringProperty("ArrayString", value=['A', 'B', 'C']))

        pg.Append(
            wxpg.EnumProperty(
                "Enum", "Enum",
                ['wxPython Rules', 'wxPython Rocks', 'wxPython Is The Best'],
                [10, 11, 12], 0))
        pg.Append(
            wxpg.EditEnumProperty("EditEnum", "EditEnumProperty",
                                  ['A', 'B', 'C'], [0, 1, 2],
                                  "Text Not in List"))

        pg.Append(wxpg.PropertyCategory("3 - Advanced Properties"))
        pg.Append(wxpg.DateProperty("Date", value=wx.DateTime.Now()))
        pg.Append(wxpg.FontProperty("Font", value=panel.GetFont()))
        pg.Append(
            wxpg.ColourProperty("Colour", value=panel.GetBackgroundColour()))
        pg.Append(wxpg.SystemColourProperty("SystemColour"))
        pg.Append(wxpg.ImageFileProperty("ImageFile"))
        pg.Append(
            wxpg.MultiChoiceProperty("MultiChoice",
                                     choices=['wxWidgets', 'QT', 'GTK+']))

        pg.Append(wxpg.PropertyCategory("4 - Additional Properties"))
        #pg.Append( wxpg.PointProperty("Point",value=panel.GetPosition()) )
        pg.Append(SizeProperty("Size", value=panel.GetSize()))
        #pg.Append( wxpg.FontDataProperty("FontData") )
        pg.Append(wxpg.IntProperty("IntWithSpin", value=256))
        pg.SetPropertyEditor("IntWithSpin", "SpinCtrl")

        pg.SetPropertyAttribute("File", wxpg.PG_FILE_SHOW_FULL_PATH, 0)
        pg.SetPropertyAttribute("File", wxpg.PG_FILE_INITIAL_PATH,
                                r"C:\Program Files\Internet Explorer")
        pg.SetPropertyAttribute("Date", wxpg.PG_DATE_PICKER_STYLE,
                                wx.adv.DP_DROPDOWN | wx.adv.DP_SHOWCENTURY)

        pg.Append(wxpg.PropertyCategory("5 - Custom Properties and Editors"))
        pg.Append(IntProperty2("IntProperty2", value=1024))

        pg.Append(PyObjectProperty("PyObjectProperty"))

        pg.Append(DirsProperty("Dirs1", value=['C:/Lib', 'C:/Bin']))
        pg.Append(DirsProperty("Dirs2", value=['/lib', '/bin']))

        # Test another type of delimiter
        pg.SetPropertyAttribute("Dirs2", "Delimiter", '"')

        # SampleMultiButtonEditor
        pg.Append(wxpg.LongStringProperty("MultipleButtons"))
        pg.SetPropertyEditor("MultipleButtons", "SampleMultiButtonEditor")
        pg.Append(SingleChoiceProperty("SingleChoiceProperty"))

        # Custom editor samples
        prop = pg.Append(
            wxpg.StringProperty("StringWithCustomEditor", value="test value"))
        pg.SetPropertyEditor(prop, "TrivialPropertyEditor")

        pg.Append(wxpg.ImageFileProperty("ImageFileWithLargeEditor"))
        pg.SetPropertyEditor("ImageFileWithLargeEditor", "LargeImageEditor")

        # When page is added, it will become the target page for AutoFill
        # calls (and for other property insertion methods as well)
        pg.AddPage("Page 2 - Results of AutoFill will appear here")

        topsizer.Add(pg, 1, wx.EXPAND)

        rowsizer = wx.BoxSizer(wx.HORIZONTAL)
        but = wx.Button(panel, -1, "SetPropertyValues")
        but.Bind(wx.EVT_BUTTON, self.OnSetPropertyValues)
        rowsizer.Add(but, 1)
        but = wx.Button(panel, -1, "GetPropertyValues")
        but.Bind(wx.EVT_BUTTON, self.OnGetPropertyValues)
        rowsizer.Add(but, 1)
        topsizer.Add(rowsizer, 0, wx.EXPAND)
        rowsizer = wx.BoxSizer(wx.HORIZONTAL)
        but = wx.Button(panel, -1, "GetPropertyValues(as_strings=True)")
        but.Bind(wx.EVT_BUTTON, self.OnGetPropertyValues2)
        rowsizer.Add(but, 1)
        but = wx.Button(panel, -1, "AutoFill")
        but.Bind(wx.EVT_BUTTON, self.OnAutoFill)
        rowsizer.Add(but, 1)
        topsizer.Add(rowsizer, 0, wx.EXPAND)
        rowsizer = wx.BoxSizer(wx.HORIZONTAL)
        but = wx.Button(panel, -1, "Delete")
        but.Bind(wx.EVT_BUTTON, self.OnDeleteProperty)
        rowsizer.Add(but, 1)
        but = wx.Button(panel, -1, "Run Tests")
        but.Bind(wx.EVT_BUTTON, self.RunTests)
        rowsizer.Add(but, 1)
        topsizer.Add(rowsizer, 0, wx.EXPAND)

        panel.SetSizer(topsizer)
        topsizer.SetSizeHints(panel)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(panel, 1, wx.EXPAND)
        self.SetSizer(sizer)
        self.SetAutoLayout(True)
Exemple #7
0
    def Remplissage(self):
        # Bordereau
        self.Append(wxpg.PropertyCategory(_(u"Bordereau")))

        propriete = wxpg.IntProperty(label=_(u"Exercice"),
                                     name="exercice",
                                     value=datetime.date.today().year)
        propriete.SetHelpString(_(u"Saisissez l'année de l'exercice"))
        self.Append(propriete)
        self.SetPropertyEditor("exercice", "SpinCtrl")

        listeMois = [
            u"_",
            _(u"Janvier"),
            _(u"Février"),
            _(u"Mars"),
            _(u"Avril"),
            _(u"Mai"),
            _(u"Juin"),
            _(u"Juillet"),
            _(u"Août"),
            _(u"Septembre"),
            _(u"Octobre"),
            _(u"Novembre"),
            _(u"Décembre")
        ]
        propriete = wxpg.EnumProperty(label=_(u"Mois"),
                                      name="mois",
                                      labels=listeMois,
                                      values=range(0, 13),
                                      value=datetime.date.today().month)
        propriete.SetHelpString(_(u"Sélectionnez le mois"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Objet"),
                                        name="objet_dette",
                                        value=u"")
        propriete.SetHelpString(
            _(u"Saisissez l'objet du bordereau (Ex : 'Centre de Loisirs')"))
        self.Append(propriete)

        # Dates
        self.Append(wxpg.PropertyCategory(_(u"Dates")))

        if 'phoenix' in wx.PlatformInfo:
            now = wx.DateTime.Now()
        else:
            now = wx.DateTime_Now()

        propriete = wxpg.DateProperty(label=_(u"Date d'émission"),
                                      name="date_emission",
                                      value=now)
        propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE,
                               DP_DROPDOWN | DP_SHOWCENTURY)
        self.Append(propriete)

        propriete = wxpg.DateProperty(label=_(u"Date du prélèvement"),
                                      name="date_prelevement",
                                      value=now)
        propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE,
                               DP_DROPDOWN | DP_SHOWCENTURY)
        self.Append(propriete)

        propriete = wxpg.DateProperty(label=_(u"Avis d'envoi"),
                                      name="date_envoi",
                                      value=now)
        propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE,
                               DP_DROPDOWN | DP_SHOWCENTURY)
        self.Append(propriete)

        # Collectivité
        self.Append(wxpg.PropertyCategory(_(u"Identification")))

        propriete = wxpg.StringProperty(label=_(u"ID Bordereau"),
                                        name="id_bordereau",
                                        value=u"")
        propriete.SetHelpString(_(u"Saisissez l'ID du bordereau"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"ID Poste"),
                                        name="id_poste",
                                        value=u"")
        propriete.SetHelpString(_(u"Saisissez l'ID du bordereau"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"ID Collectivité"),
                                        name="id_collectivite",
                                        value=u"")
        propriete.SetHelpString(_(u"Saisissez l'ID de la collectivité"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Code Collectivité"),
                                        name="code_collectivite",
                                        value=u"")
        propriete.SetHelpString(_(u"Saisissez le code Collectivité"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Code Budget"),
                                        name="code_budget",
                                        value=u"")
        propriete.SetHelpString(_(u"Saisissez le code Budget"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Code Produit Local"),
                                        name="code_prodloc",
                                        value=u"")
        propriete.SetHelpString(_(u"Saisissez le code Produit Local"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Code Etablissement"),
                                        name="code_etab",
                                        value=u"")
        propriete.SetHelpString(
            _(u"Saisissez le code Etablissement (3 caractères max). Nécessaire pour le datamatrix. Ce code apparaît dans les paramètres de flux dans Hélios."
              ))
        self.Append(propriete)

        # Libellés
        self.Append(wxpg.PropertyCategory(_(u"Libellés")))

        propriete = wxpg.StringProperty(
            label=_(u"Objet de la pièce"),
            name="objet_piece",
            value=_(u"FACTURE NUM{NUM_FACTURE} {MOIS_LETTRES} {ANNEE}"))
        propriete.SetHelpString(
            _(u"Saisissez l'objet de la pièce (en majuscules et sans accents). Vous pouvez personnaliser ce libellé grâce aux mots-clés suivants : {NOM_ORGANISATEUR} {NUM_FACTURE} {LIBELLE_FACTURE} {MOIS} {MOIS_LETTRES} {ANNEE}."
              ))
        self.Append(propriete)

        propriete = wxpg.StringProperty(
            label=_(u"Libellé du prélèvement"),
            name="prelevement_libelle",
            value=u"{NOM_ORGANISATEUR} - {OBJET_PIECE}")
        propriete.SetHelpString(
            _(u"Saisissez le libellé du prélèvement qui apparaîtra sur le relevé de compte de la famille. Vous pouvez personnaliser ce libellé grâce aux mots-clés suivants : {NOM_ORGANISATEUR} {OBJET_PIECE} {NUM_FACTURE} {LIBELLE_FACTURE} {MOIS} {MOIS_LETTRES} {ANNEE}."
              ))
        self.Append(propriete)

        # Pièces jointes
        self.Append(wxpg.PropertyCategory(_(u"Pièces jointes")))

        propriete = wxpg.BoolProperty(
            label=_(u"Inclure les factures en pièces jointes"),
            name="inclure_pieces_jointes",
            value=False)
        propriete.SetHelpString(
            _(u"Cochez cette case si vous souhaitez que Noethys intègre les factures en temps que pièces jointes au bordereau"
              ))
        propriete.SetAttribute("UseCheckbox", True)
        self.Append(propriete)

        propriete = wxpg.StringProperty(
            label=_(u"Format des noms de fichiers"),
            name="format_nom_fichier",
            value=_(u"F{NUM_FACTURE}_{NOM_TITULAIRES_MAJ}"))
        propriete.SetHelpString(
            _(u"Saisissez le format des noms de fichiers (en majuscules et sans espaces ni accents). Vous pouvez personnaliser ce libellé grâce aux mots-clés suivants : {NUM_FACTURE} {NOM_TITULAIRES} {NOM_TITULAIRES_MAJ}."
              ))
        self.Append(propriete)

        # Règlement automatique
        self.Append(wxpg.PropertyCategory(_(u"Règlement automatique")))

        propriete = wxpg.BoolProperty(label=_(u"Régler automatiquement"),
                                      name="reglement_auto",
                                      value=False)
        propriete.SetHelpString(
            _(u"Cochez cette case si vous souhaitez que Noethys créé un règlement automatiquement pour les prélèvements"
              ))
        propriete.SetAttribute("UseCheckbox", True)
        self.Append(propriete)

        propriete = wxpg.EnumProperty(label=_(u"Compte à créditer"),
                                      name="IDcompte")
        propriete.SetHelpString(
            _(u"Sélectionnez le compte bancaire à créditer dans le cadre du règlement automatique"
              ))
        propriete.SetEditor("EditeurComboBoxAvecBoutons")
        self.Append(propriete)
        self.MAJ_comptes()

        propriete = wxpg.EnumProperty(label=_(u"Mode de règlement"),
                                      name="IDmode")
        propriete.SetHelpString(
            _(u"Sélectionnez le mode de règlement à utiliser dans le cadre du règlement automatique"
              ))
        propriete.SetEditor("EditeurComboBoxAvecBoutons")
        self.Append(propriete)
        self.MAJ_modes()

        # Préférences
        self.SetPropertyValue(
            "inclure_pieces_jointes",
            UTILS_Parametres.Parametres(mode="get",
                                        categorie="export_pes",
                                        nom="inclure_pieces_jointes",
                                        valeur=False))
Exemple #8
0
    def InitMatrice(self, matrice):
        # Compose la grille de saisie des paramètres selon le dictionnaire matrice
        self.matrice = matrice
        self.dicProperties = {}
        chapitre = self.matrice['nomchapitre']
        if isinstance(chapitre, str):
            self.Append(wxpg.PropertyCategory(chapitre))
        for ligne in self.matrice['lignes']:
            if 'name' in ligne and 'genre' in ligne:
                if not 'label' in ligne: ligne['name'] = None
                if not 'value' in ligne: ligne['value'] = None
                genre, name, label, value = (ligne['genre'], ligne['name'],
                                             ligne['label'], ligne['value'])
                genre = genre.lower()
                if not 'labels' in ligne: ligne['labels'] = []
                """
                if 'values' in ligne and ligne['values']:
                    if ligne['labels']:
                        if len(ligne['values']) > 0 and len(ligne['labels']) == 0:
                            ligne['labels'] = ligne['values']
                    else: ligne['labels'] = ligne['values']
                """
                commande = ''
                try:
                    commande = genre
                    if genre in ['enum', 'combo']:
                        values = list(range(0, len(ligne['labels'])))
                        if not isinstance(value, int): value = 0
                        choix = wxpg.PGChoices(ligne['labels'], values=values)
                        propriete = wxpg.EnumProperty(label=label,
                                                      name=name,
                                                      choices=choix,
                                                      value=value)

                    elif genre == 'multichoice':
                        propriete = wxpg.MultiChoiceProperty(
                            label, name, choices=ligne['labels'], value=value)

                    elif genre in ['bool', 'check']:
                        wxpg.PG_BOOL_USE_CHECKBOX = 1
                        propriete = wxpg.BoolProperty(label=label,
                                                      name=name,
                                                      value=value)
                        propriete.PG_BOOL_USE_CHECKBOX = 1

                    elif genre in ['date', 'datetime', 'time']:
                        wxpg.PG_BOOL_USE_CHECKBOX = 1
                        propriete = wxpg.DateProperty(label=label,
                                                      name=name,
                                                      value=value)
                        propriete.SetFormat('%d/%m/%Y')
                        propriete.PG_BOOL_USE_CHECKBOX = 1

                    else:
                        commande = "wxpg."  + genre.upper()[:1] + genre.lower()[1:] \
                                            + "Property(label= label, name=name, value=value)"
                        propriete = eval(commande)
                    if 'help' in ligne:
                        propriete.SetHelpString(ligne['help'])
                    self.Append(propriete)
                    self.dicProperties[propriete] = name
                    self.dicProperties[name] = propriete
                except Exception as err:
                    wx.MessageBox(
                        "Echec sur Property de name - value: %s - %s (%s)\nLe retour d'erreur est : \n%s\n\nSur commande : %s"
                        % (name, value, type(value), err, commande),
                        'CTRL_property.InitMatrice() : Paramètre ligne indigeste !',
                        wx.OK | wx.ICON_STOP)
Exemple #9
0
    def Remplissage(self):
        # Bordereau
        self.Append(wxpg.PropertyCategory(_(u"Bordereau")))

        propriete = wxpg.IntProperty(label=_(u"Exercice"),
                                     name="exercice",
                                     value=datetime.date.today().year)
        propriete.SetHelpString(_(u"Saisissez l'année de l'exercice"))
        self.Append(propriete)
        self.SetPropertyEditor("exercice", "SpinCtrl")

        listeMois = [
            u"_",
            _(u"Janvier"),
            _(u"Février"),
            _(u"Mars"),
            _(u"Avril"),
            _(u"Mai"),
            _(u"Juin"),
            _(u"Juillet"),
            _(u"Août"),
            _(u"Septembre"),
            _(u"Octobre"),
            _(u"Novembre"),
            _(u"Décembre")
        ]
        propriete = wxpg.EnumProperty(label=_(u"Mois"),
                                      name="mois",
                                      labels=listeMois,
                                      values=range(0, 13),
                                      value=datetime.date.today().month)
        propriete.SetHelpString(_(u"Sélectionnez le mois"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Objet"),
                                        name="objet_dette",
                                        value=u"")
        propriete.SetHelpString(
            _(u"Saisissez l'objet du bordereau (Ex : 'Centre de Loisirs')"))
        self.Append(propriete)

        # Dates
        self.Append(wxpg.PropertyCategory(_(u"Dates")))

        if 'phoenix' in wx.PlatformInfo:
            now = wx.DateTime.Now()
        else:
            now = wx.DateTime_Now()

        propriete = wxpg.DateProperty(label=_(u"Date d'émission"),
                                      name="date_emission",
                                      value=now)
        propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE,
                               DP_DROPDOWN | DP_SHOWCENTURY)
        self.Append(propriete)

        propriete = wxpg.DateProperty(label=_(u"Date du prélèvement"),
                                      name="date_prelevement",
                                      value=now)
        propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE,
                               DP_DROPDOWN | DP_SHOWCENTURY)
        self.Append(propriete)

        propriete = wxpg.DateProperty(label=_(u"Avis d'envoi"),
                                      name="date_envoi",
                                      value=now)
        propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE,
                               DP_DROPDOWN | DP_SHOWCENTURY)
        self.Append(propriete)

        # Collectivité
        self.Append(wxpg.PropertyCategory(_(u"Identification")))

        propriete = wxpg.StringProperty(label=_(u"ID Bordereau"),
                                        name="id_bordereau",
                                        value=u"")
        propriete.SetHelpString(
            _(u"Saisissez l'ID du bordereau. Facultatif : Si non renseigné, le bordereau est créé dans le Brouillard"
              ))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Article budgétaire"),
                                        name="id_poste",
                                        value=u"")
        propriete.SetHelpString(_(u"Saisissez l'article budgétaire (Nature)"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"ID Collectivité"),
                                        name="id_collectivite",
                                        value=u"")
        propriete.SetHelpString(
            _(u"Saisissez l'ID de la collectivité (Numéro SIRET)"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Code Collectivité"),
                                        name="code_collectivite",
                                        value=u"")
        propriete.SetHelpString(_(u"Saisissez le code Collectivité"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Code Budget"),
                                        name="code_budget",
                                        value=u"")
        propriete.SetHelpString(_(u"Saisissez le code Budget"))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Code Produit Local"),
                                        name="code_prodloc",
                                        value=u"")
        propriete.SetHelpString(_(u"Saisissez le code Produit Local"))
        self.Append(propriete)

        # Libellés
        self.Append(wxpg.PropertyCategory(_(u"Libellés")))

        propriete = wxpg.StringProperty(
            label=_(u"Objet de la pièce"),
            name="objet_piece",
            value=_(u"FACTURE NUM{NUM_FACTURE} {MOIS_LETTRES} {ANNEE}"))
        propriete.SetHelpString(
            _(u"Saisissez l'objet de la pièce (en majuscules et sans accents). Vous pouvez personnaliser ce libellé grâce aux mots-clés suivants : {NOM_ORGANISATEUR} {NUM_FACTURE} {LIBELLE_FACTURE} {MOIS} {MOIS_LETTRES} {ANNEE}."
              ))
        self.Append(propriete)

        propriete = wxpg.StringProperty(
            label=_(u"Libellé du prélèvement"),
            name="prelevement_libelle",
            value=u"{NOM_ORGANISATEUR} - {OBJET_PIECE}")
        propriete.SetHelpString(
            _(u"Saisissez le libellé du prélèvement qui apparaîtra sur le relevé de compte de la famille. Vous pouvez personnaliser ce libellé grâce aux mots-clés suivants : {NOM_ORGANISATEUR} {OBJET_PIECE} {NUM_FACTURE} {LIBELLE_FACTURE} {MOIS} {MOIS_LETTRES} {ANNEE}."
              ))
        self.Append(propriete)

        propriete = wxpg.StringProperty(label=_(u"Nom de la collectivité"),
                                        name="nom_collectivite",
                                        value=u"{NOM_ORGANISATEUR}")
        propriete.SetHelpString(
            _(u"Saisissez le nom de la collectivité. A défaut, c'est le nom de l'organisateur qui sera inséré automatiquement."
              ))
        self.Append(propriete)

        # Règlement automatique
        self.Append(wxpg.PropertyCategory(_(u"Règlement automatique")))

        propriete = wxpg.BoolProperty(label=_(u"Régler automatiquement"),
                                      name="reglement_auto",
                                      value=False)
        propriete.SetHelpString(
            _(u"Cochez cette case si vous souhaitez que Noethys créé un règlement automatiquement pour les prélèvements"
              ))
        propriete.SetAttribute("UseCheckbox", True)
        self.Append(propriete)

        propriete = wxpg.EnumProperty(label=_(u"Compte à créditer"),
                                      name="IDcompte")
        propriete.SetHelpString(
            _(u"Sélectionnez le compte bancaire à créditer dans le cadre du règlement automatique"
              ))
        propriete.SetEditor("EditeurComboBoxAvecBoutons")
        self.Append(propriete)
        self.MAJ_comptes()

        propriete = wxpg.EnumProperty(label=_(u"Mode de règlement"),
                                      name="IDmode")
        propriete.SetHelpString(
            _(u"Sélectionnez le mode de règlement à utiliser dans le cadre du règlement automatique"
              ))
        propriete.SetEditor("EditeurComboBoxAvecBoutons")
        self.Append(propriete)
        self.MAJ_modes()
Exemple #10
0
    def UpdateHeaderValues(self):

        # clear the existing general page
        self._general_page.Clear()

        # get main frame widget - abort if something goes wrong
        # for instance - handle case where all tabs are closed
        try:

            try:
                image = component.getUtility(ICurrentImage)
            except component.ComponentLookupError:
                # no image is loaded
                return

            header = image.GetHeader().copy()
            dicom_header = image.GetDICOMHeader()
            pageState = component.getUtility(
                ICurrentViewportManager).GetPageState()
        except:
            logging.exception("ImageInfo")
            return

        # if page isn't an image, get out of here early
        if pageState.GetPageType() != "image":
            return

        # remove hidden properties

        # Update all text fields in the dialog box
        # Title
        val = dicom_header.PatientsName
        if isinstance(val, list):
            val = '\\'.join(val)

        properties = {
            'Image Properties': [],
            'Patient/Subject Info': [],
            'Scan Properties': [],
            'Reconstruction Properties': [],
            "Display Properties": [],
            'Additional Properties': []
        }

        prop = Property("Image Properties", "Number of Channels",
                        image.GetNumberOfScalarComponents(), int, True)
        properties[prop.category].append(prop)

        spacing = image.GetSpacing()
        origin = image.GetOrigin()
        (SizeX, SizeY, SizeZ) = image.GetDimensions()
        _range = image.GetScalarRange()
        _size = SizeX * SizeY * SizeZ * image.GetScalarSize(
        ) * image.GetNumberOfScalarComponents()

        prop = Property("Image Properties", "Minimum Value", float(_range[0]),
                        float, True)
        properties[prop.category].append(prop)

        prop = Property("Image Properties", "Maximum Value", float(_range[1]),
                        float, True)
        properties[prop.category].append(prop)

        prop = Property(
            "Image Properties", "Voxel Size (mm)",
            "%.4F %.4F %.4F" % (spacing[0], spacing[1], spacing[2]), str, True)
        properties[prop.category].append(prop)

        prop = Property("Image Properties", "Image Origin (mm)",
                        "%.4F %.4F %.4F" % (origin[0], origin[1], origin[2]),
                        str, True)
        properties[prop.category].append(prop)

        prop = Property("Image Properties", "Image Bit-depth",
                        int(image.GetScalarSize() * 8), int, True)
        properties[prop.category].append(prop)

        prop = Property("Image Properties", "Image Data Type",
                        image.GetScalarTypeAsString(), str, True)
        properties[prop.category].append(prop)

        prop = Property("Image Properties", "Dimensions",
                        "%d %d %d" % (SizeX, SizeY, SizeZ), str, True)
        properties[prop.category].append(prop)

        prop = Property("Image Properties", "Memory Required",
                        self.sizeof_fmt(_size), str, True)
        properties[prop.category].append(prop)

        prop = Property("Patient/Subject Info", "Title",
                        str(val).encode('utf-8'), str, False)
        properties[prop.category].append(prop)

        val = dicom_header.SeriesDescription
        prop = Property("Patient/Subject Info", "Subject",
                        str(val).encode('utf-8'), str, False)
        properties[prop.category].append(prop)

        if 'PatientPosition' in dicom_header:
            pos = dicom_header.PatientPosition
        else:
            pos = ''

        if pos in self.patient_positions:
            index = self.patient_positions.keys().index(pos)
        else:
            index = 0

        prop = Property("Patient/Subject Info", "Patient Position", index,
                        self.patient_positions.values(), False)
        properties[prop.category].append(prop)

        # Modality
        modality = dicom_header.Modality

        if modality in self.modtostring:
            index = self.modtostring.keys().index(modality)
        else:
            index = 0

        prop = Property("Scan Properties", "Modality", index,
                        self.modtostring.values(), False)
        properties[prop.category].append(prop)

        try:
            _d = image.GetDate()  # DICOM-style date
            dmy = None
            try:
                year, month, day = int(_d[0:4]), int(_d[4:6]), int(_d[6:8])
            except:
                logging.error("Unable to parse DICOM date: {0}".format(_d))
            _t = image.GetTime()  # DICOM_style time
            try:
                hour, minute, second, microsecond = int(_t[0:2]), int(
                    _t[2:4]), int(_t[4:6]), _t[6:]
                dmy = (day, month - 1, year)
            except:
                logging.error("Unable to parse DICOM time: {0}".format(_t))

            if dmy:
                prop = Property("Scan Properties", "Date",
                                wx.DateTimeFromDMY(*dmy), wx.DateTime, False)
                properties[prop.category].append(prop)
        except:
            logging.exception("UpdateHeaderValues")

        # Scan-related fields (deprecated)
        scan_mapping = {
            'spacingunit': (str, 'Measurement Unit'),
        }

        # handle old-style keywords (deprecated)
        for key in header:
            if key.startswith('scan_') or key.startswith('scanner_'):
                if key in scan_mapping:
                    dtype, label = scan_mapping[key]
                else:
                    dtype, label = (str, key)

                if dtype == float or isinstance(header[key], float):
                    prop = Property("Scan Properties", label,
                                    float(header[key]), float, False)
                elif dtype == int or isinstance(header[key], int):
                    prop = Property("Scan Properties", label, int(header[key]),
                                    int, False)
                else:
                    prop = Property("Scan Properties", label, str(header[key]),
                                    str, False)

                properties[prop.category].append(prop)

        # scan-related DICOM fields
        dicom_scan_fields = {
            'ExposureTime': (float, 'Exposure Time (ms)'),
            'KVP': (float, 'X-Ray Voltage (kVp)'),
            'XRayTubeCurrent': (float, 'X-Ray Tube Current (mA)'),
            'XRayTubeCurrentInmA': (float, u'X-Ray Tube Current (mA)'),
            'XRayTubeCurrentInuA': (float, u'X-Ray Tube Current (\u00b5A)'),
            'DistanceSourceToPatient': (float, 'Object Position (mm)'),
            'DistanceSourceToDetector': (float, 'Detector Position (mm)'),
            'Manufacturer': (str, 'Scanner Manufacturer'),
            'ManufacturerModelName': (str, 'Scanner Model'),
            'ProtocolName': (str, 'Protocol Name'),
        }

        # handle DICOM keywords
        for key in dicom_scan_fields:
            if key in dicom_header:
                dtype, label = dicom_scan_fields[key]
                value = dicom_header.get(key)
                if dtype == float:
                    try:
                        value = float(value)
                        prop = Property("Scan Properties", label, value, float,
                                        False)
                        properties[prop.category].append(prop)
                        continue
                    except:
                        dtype = str
                elif dtype == int:
                    try:
                        value = int(value)
                        prop = Property("Scan Properties", label, value, int,
                                        False)
                        properties[prop.category].append(prop)
                        continue
                    except:
                        dtype = str

                prop = Property("Scan Properties", label,
                                str(dicom_header.get(key)), str, False)
                properties[prop.category].append(prop)

        # Reconstruction-related fields
        recon_property_created = False
        recon_mapping = {
            'recon_sw_version': (str, 'Software Version'),
            'recon_git_sha1': (str, 'Software SHA1'),
            'recon_date': (str, 'Reconstruction Date'),
            'recon_center_of_rotation': (float, 'Center of Rotation'),
            'recon_central_slice': (float, 'Central Slice'),
            'recon_filter_type': (str, 'Filter Type'),
            'recon_auth': (int, 'Reconstruction Authorized'),
            'recon_cmdLine': (str, 'Commandline'),
            'recon_gate_delay_us': (float, u'Gating delay (\u00b5s)'),
            'recon_gate_window_us': (float, u'Gating window (\u00b5s)'),
            'ct_recon_macaddr': (str, 'Ethernet Address'),
            'ct_recon_every_nth_proj': (int, 'View Skip'),
            'ct_cone_angle': (float, 'Cone Angle (deg)')
        }

        for key in header.keys():
            if key.startswith('recon_') or key.startswith(
                    'ct_recon_') or key in ('y_bin', 'z_bin'):
                if key in recon_mapping:
                    dtype, label = recon_mapping[key]
                else:
                    dtype, label = (str, key)

                if dtype == float:
                    prop = Property("Reconstruction Properties", label,
                                    float(header[key]), float, False)
                    properties[prop.category].append(prop)
                else:
                    prop = Property("Reconstruction Properties", label,
                                    str(header[key]), str, False)
                    properties[prop.category].append(prop)

                del (header[key])

        try:
            if modality == 'CT':
                prop = Property("Reconstruction Properties", "Air Value",
                                float(header.get('air', 0.0)), float, False)
                properties[prop.category].append(prop)
                prop = Property("Reconstruction Properties", "Water Value",
                                float(header.get('water', 0.0)), float, False)
                properties[prop.category].append(prop)
                prop = Property("Reconstruction Properties", "Bone Value (HU",
                                int(header.get('boneHU', 0)), int, False)
                properties[prop.category].append(prop)
        except:
            pass

        self._general_page.Append(wxpg.PropertyCategory("Display Properties"))
        prop = Property("Display Properties", "Texture Interpolation",
                        bool(self._config.bInterpolateTextures), bool, False)
        properties[prop.category].append(prop)

        numC = image.GetNumberOfScalarComponents()
        prop = Property("Display Properties",
                        "Colour Table",
                        pageState.lut_index,
                        self.LD.get_names(),
                        False,
                        disabled=(numC > 1))
        properties[prop.category].append(prop)

        # grab configuration object, see if there's any colour info in there
        try:
            root = MicroViewObjectShelve.MicroViewObjectShelve.getObject(
            ).getRoot()
            state = root['options.pane3D.background']
            bg1 = state.GetTopColour()
            bg2 = state.GetBottomColour()
            use_gradient = state.GetGradientState()
        except:
            bg1 = bg2 = (0, 0, 0)
            use_gradient = True

        # for the moment, colour editing shall be disabled
        prop = Property("Display Properties", "Background Colour #1", bg1,
                        tuple, False)
        properties[prop.category].append(prop)
        prop = Property("Display Properties", "Background Colour #2", bg2,
                        tuple, False)
        properties[prop.category].append(prop)
        prop = Property("Display Properties", "Enable Background Gradient",
                        use_gradient, bool, False)
        properties[prop.category].append(prop)

        # everything else
        for key in header:
            _k = key.lower()
            if not (_k.startswith('recon_') or _k.startswith('scan_')
                    or _k.startswith('scanner_') or _k.startswith('hidden')):
                if key.lower() not in ('size', 'air', 'water', 'bonehu',
                                       'y_bin', 'z_bin'):
                    try:
                        prop = Property("Additional Properties", key,
                                        str(header[key]), str, False)
                        properties[prop.category].append(prop)
                    except:
                        logging.warning("duplicate tag: {0}".format(key))

        _filter = None
        if self._search_filter:
            _filter = self._search_filter.lower()
            _filter = _filter.split()

        added_categories = []

        for category in properties:
            for property in properties[category]:

                name = property.name
                value = property.value

                # apply filter
                should_display = False
                if _filter:
                    for _f in _filter:
                        if _f in unicode(name).lower() or _f in unicode(
                                repr(value)).lower():
                            should_display = True
                            break
                    if not should_display:
                        continue

                if category not in added_categories:
                    added_categories.append(category)
                    self._general_page.Append(wxpg.PropertyCategory(category))

                if property.value_type is int:
                    _id = wxpg.IntProperty(property.name, value=property.value)
                elif property.value_type is float:
                    _id = wxpg.FloatProperty(property.name,
                                             value=property.value)
                elif property.value_type is str:
                    _id = wxpg.StringProperty(property.name,
                                              value=property.value)
                elif isinstance(property.value_type, list):
                    # enum
                    _id = wxpg.EnumProperty(property.name, property.name,
                                            property.value_type,
                                            range(len(property.value_type)),
                                            property.value)
                elif property.value_type is wx.DateTime:
                    # date
                    _id = wxpg.DateProperty(property.name,
                                            value=property.value)
                    _id.SetAttribute(wxpg.PG_DATE_PICKER_STYLE,
                                     wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
                elif property.value_type is bool:
                    _id = wxpg.BoolProperty(property.name,
                                            value=property.value)
                elif property.value_type is tuple:
                    _id = wxpg.ColourProperty(property.name,
                                              value=property.value)

                self._general_page.Append(_id)
                if property.read_only:
                    _id.ChangeFlag(wxpg.PG_PROP_READONLY, True)
                if property.disabled:
                    self._general_page.DisableProperty(_id)
Exemple #11
0
 def test_propgridadvprops10(self):
     p = pg.DateProperty()
Exemple #12
0
    def __init__(self, parent, log):
        # Use the WANTS_CHARS style so the panel doesn't eat the Return key.
        wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)

        self.log = log
        tID = wx.NewId()

        topsizer = wx.BoxSizer(wx.VERTICAL)

        # Difference between using PropertyGridManager vs PropertyGrid is that
        # the manager supports multiple pages and a description box.
        self.pg = pg = wxpg.PropertyGridManager(
            self,
            style=wxpg.PG_SPLITTER_AUTO_CENTER | wxpg.PG_AUTO_SORT
            | wxpg.PG_TOOLBAR)  # |wxpg.PG_DESCRIPTION
        #self.pg = pg = wxpg.PropertyGrid(self,
        #    style=wxpg.PG_SPLITTER_AUTO_CENTER|wxpg.PG_AUTO_SORT)

        # Show help as tooltips
        pg.SetExtraStyle(wxpg.PG_EX_HELP_AS_TOOLTIPS
                         | wxpg.PG_EX_MULTIPLE_SELECTION)

        pg.Bind(wxpg.EVT_PG_CHANGED, self.OnPropGridChange)
        pg.Bind(wxpg.EVT_PG_PAGE_CHANGED, self.OnPropGridPageChange)
        pg.Bind(wxpg.EVT_PG_SELECTED, self.OnPropGridSelect)
        pg.Bind(wxpg.EVT_PG_RIGHT_CLICK, self.OnPropGridRightClick)

        # Needed by custom image editor
        wx.InitAllImageHandlers()

        #
        # Let's use some simple custom editor
        #
        # NOTE: Editor must be registered *before* adding a property that
        # uses it.
        pg.RegisterEditor(TrivialPropertyEditor)
        pg.RegisterEditor(LargeImageEditor)

        #
        # Add properties
        #

        pg.AddPage("Page 1 - Testing All")

        pg.Append(wxpg.PropertyCategory("1 - Basic Properties"))

        pg.Append(wxpg.StringProperty("String", value="Some Text"))
        pg.Append(wxpg.IntProperty("Int", value=100))
        pg.Append(wxpg.FloatProperty("Float", value=100.0))
        pg.Append(wxpg.BoolProperty("Bool", value=True))
        pg.Append(wxpg.BoolProperty("Bool_with_Checkbox", value=True))
        pg.SetPropertyAttribute("Bool_with_Checkbox", "UseCheckbox", True)

        pg.Append(wxpg.PropertyCategory("2 - More Properties"))
        pg.Append(
            wxpg.LongStringProperty(
                "LongString",
                value=
                "This is a\\nmulti-line string\\nwith\\ttabs\\nmixed\\tin."))
        pg.Append(wxpg.DirProperty("Dir", value="C:\\Windows"))
        pg.Append(wxpg.FileProperty("File", value="C:\\Windows\\system.ini"))
        pg.Append(
            wxpg.ArrayStringProperty("ArrayString", value=['A', 'B', 'C']))

        pg.Append(
            wxpg.EnumProperty(
                "Enum", "Enum",
                ['wxPython Rules', 'wxPython Rocks', 'wxPython Is The Best'],
                [10, 11, 12], 0))
        pg.Append(
            wxpg.EditEnumProperty("EditEnum", "EditEnumProperty",
                                  ['A', 'B', 'C'], [0, 1, 2],
                                  "Text Not in List"))

        pg.Append(wxpg.PropertyCategory("3 - Advanced Properties"))
        pg.Append(wxpg.DateProperty("Date", value=wx.DateTime_Now()))
        pg.Append(wxpg.FontProperty("Font", value=self.GetFont()))
        pg.Append(
            wxpg.ColourProperty("Colour", value=self.GetBackgroundColour()))
        pg.Append(wxpg.SystemColourProperty("SystemColour"))
        pg.Append(wxpg.ImageFileProperty("ImageFile"))
        pg.Append(
            wxpg.MultiChoiceProperty("MultiChoice",
                                     choices=['wxWidgets', 'QT', 'GTK+']))

        pg.Append(wxpg.PropertyCategory("4 - Additional Properties"))
        pg.Append(wxpg.PointProperty("Point", value=self.GetPosition()))
        pg.Append(wxpg.SizeProperty("Size", value=self.GetSize()))
        pg.Append(wxpg.FontDataProperty("FontData"))
        pg.Append(wxpg.IntProperty("IntWithSpin", value=256))
        pg.SetPropertyEditor("IntWithSpin", "SpinCtrl")
        pg.Append(wxpg.DirsProperty("Dirs", value=['C:/Lib', 'C:/Bin']))
        pg.SetPropertyHelpString("String", "String Property help string!")
        pg.SetPropertyHelpString("Dirs", "Dirs Property help string!")

        pg.SetPropertyAttribute("File", wxpg.PG_FILE_SHOW_FULL_PATH, 0)
        pg.SetPropertyAttribute("File", wxpg.PG_FILE_INITIAL_PATH,
                                "C:\\Program Files\\Internet Explorer")
        pg.SetPropertyAttribute("Date", wxpg.PG_DATE_PICKER_STYLE,
                                wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        pg.Append(wxpg.PropertyCategory("5 - Custom Properties"))
        pg.Append(IntProperty2("IntProperty2", value=1024))
        pg.Append(
            RectProperty("RectProperty", value=wx.Rect(100, 200, 300, 400)))

        pg.Append(ShapeProperty("ShapeProperty", value=0))
        pg.Append(PyObjectProperty("PyObjectProperty"))

        prop = pg.Append(
            wxpg.StringProperty("StringWithCustomEditor", value="test value"))
        pg.SetPropertyEditor(prop, "TrivialPropertyEditor")

        pg.Append(wxpg.ImageFileProperty("ImageFileWithLargeEditor"))
        pg.SetPropertyEditor("ImageFileWithLargeEditor", "LargeImageEditor")

        # When page is added, it will become the target page for AutoFill
        # calls (and for other property insertion methods as well)
        pg.AddPage("Page 2 - Results of AutoFill will appear here")

        pg.SetPropertyClientData("Point", 1234)
        if pg.GetPropertyClientData("Point") != 1234:
            raise ValueError("Set/GetPropertyClientData() failed")

        # Test setting unicode string
        pg.GetPropertyByName("String").SetValue(u"Some Unicode Text")

        #
        # Test some code that *should* fail (but not crash)
        try:
            a_ = pg.GetPropertyValue("NotARealProperty")
            pg.EnableProperty("NotAtAllRealProperty", False)
            pg.SetPropertyHelpString("AgaintNotARealProperty",
                                     "Dummy Help String")
        except:
            pass
            #raise

        topsizer.Add(pg, 1, wx.EXPAND)

        rowsizer = wx.BoxSizer(wx.HORIZONTAL)
        but = wx.Button(self, -1, "SetPropertyValues")
        but.Bind(wx.EVT_BUTTON, self.OnSetPropertyValues)
        rowsizer.Add(but, 1)
        but = wx.Button(self, -1, "GetPropertyValues")
        but.Bind(wx.EVT_BUTTON, self.OnGetPropertyValues)
        rowsizer.Add(but, 1)
        topsizer.Add(rowsizer, 0, wx.EXPAND)
        rowsizer = wx.BoxSizer(wx.HORIZONTAL)
        but = wx.Button(self, -1, "GetPropertyValues(as_strings=True)")
        but.Bind(wx.EVT_BUTTON, self.OnGetPropertyValues2)
        rowsizer.Add(but, 1)
        but = wx.Button(self, -1, "AutoFill")
        but.Bind(wx.EVT_BUTTON, self.OnAutoFill)
        rowsizer.Add(but, 1)
        topsizer.Add(rowsizer, 0, wx.EXPAND)
        rowsizer = wx.BoxSizer(wx.HORIZONTAL)
        but = wx.Button(self, -1, "Delete")
        but.Bind(wx.EVT_BUTTON, self.OnDeleteProperty)
        rowsizer.Add(but, 1)
        but = wx.Button(self, -1, "Run Tests")
        but.Bind(wx.EVT_BUTTON, self.RunTests)
        rowsizer.Add(but, 1)
        topsizer.Add(rowsizer, 0, wx.EXPAND)

        self.SetSizer(topsizer)
        topsizer.SetSizeHints(self)
Exemple #13
0
    def __init__(self, parent, title, tree, key):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           title,
                           style=wx.DEFAULT_DIALOG_STYLE,
                           size=wx.Size((300, 480)))
        # wx.Panel.__init__(self, parent, wx.ID_ANY)
        self.app = parent

        self.panel = panel = wx.Panel(self, wx.ID_ANY)
        topsizer = wx.BoxSizer(wx.VERTICAL)

        # Difference between using PropertyGridManager vs PropertyGrid is that
        # the manager supports multiple pages and a description box.
        self.pg = pg = wxpg.PropertyGridManager(
            panel, style=wxpg.PG_SPLITTER_AUTO_CENTER)

        # Show help as tooltips
        pg.SetExtraStyle(wxpg.PG_EX_HELP_AS_TOOLTIPS)

        pg.Bind(wxpg.EVT_PG_CHANGED, self.OnPropGridChange)
        pg.Bind(wxpg.EVT_PG_SELECTED, self.OnPropGridSelect)

        pg.AddPage('Page 1')
        self.key = key
        for page in tree:
            pg.Append(wxpg.PropertyCategory(page[0]))
            for item in page[1]:
                v = item[1]
                if v[0] == 'int':
                    pg.Append(wxpg.IntProperty(v[1], value=int(v[2]) or 0))
                if v[0] == 'float':
                    pg.Append(wxpg.FloatProperty(v[1], value=float(v[2]) or 0))
                if v[0] == 'str':
                    pg.Append(wxpg.StringProperty(v[1], value=v[2] or ''))
                if v[0] == 'txt':
                    pg.Append(wxpg.LongStringProperty(v[1], value=v[2] or ''))
                if v[0] == 'bool': pg.Append(wxpg.BoolProperty(v[1]))
                if v[0] == 'date':
                    pg.Append(wxpg.DateProperty(v[1], value=wx.DateTime.Now()))
                if v[0] == 'list':
                    pg.Append(
                        wxpg.EnumProperty(
                            v[1], v[1],
                            [i.strip() for i in v[2][1:-1].split(',')]))
                if v[0] == 'img':
                    pg.Append(
                        wxpg.EnumProperty(v[1], v[1], self.app.img_names()))
                if v[0] == 'tab':
                    pg.Append(
                        wxpg.EnumProperty(v[1], v[1], self.app.table_names()))

        topsizer.Add(pg, 1, wx.EXPAND)
        self.txt_info = wx.TextCtrl(self, wx.ID_ANY, 'information',
                                    wx.DefaultPosition, wx.Size(80, 80),
                                    wx.TE_MULTILINE | wx.TRANSPARENT_WINDOW)
        topsizer.Add(self.txt_info, 0, wx.EXPAND | wx.ALL, 0)
        rowsizer = wx.BoxSizer(wx.HORIZONTAL)
        but = wx.Button(panel, wx.ID_OK, "OK")
        rowsizer.Add(but, 1)
        #but.Bind( wx.EVT_BUTTON, self.OnGetPropertyValues )
        but = wx.Button(panel, wx.ID_CANCEL, "Cancel")
        rowsizer.Add(but, 1)
        topsizer.Add(rowsizer, 0, wx.EXPAND)

        panel.SetSizer(topsizer)
        topsizer.SetSizeHints(panel)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(panel, 1, wx.EXPAND)
        self.SetSizer(sizer)
        self.SetAutoLayout(True)
Exemple #14
0
    def create_datetime_property(prop_name):
        date_prop = wxpg.DateProperty(prop_name)
        # date_prop.SetAttribute(wxpg.PG_DATE_PICKER_STYLE, wx.DP_DEFAULT | DP_SHOWCENTURY)
        # date_prop.SetAttribute(wxpg.PG_DATE_FORMAT, wildcard)

        return date_prop