Re: [PATCH 23/30] Incorporate all the Graph types in the custom screen.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 02, 2009 at 10:44:10AM -1000, David Cantrell wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On Tue, 29 Sep 2009, Joel Granados wrote:
>
>> On Fri, Sep 25, 2009 at 01:55:10PM -1000, David Cantrell wrote:
>>> -----BEGIN PGP SIGNED MESSAGE-----
>>> Hash: SHA1
>>>
>>> Comments below.
>>>
>>> On Wed, 16 Sep 2009, Joel Granados Moreno wrote:
>>>
>>>> * iw/partition_gui.py (treeSelectCB): Make sure that the graph is being
>>>> painted by the right StripeGraph class.  We decide which graph to use
>>>> based on the device we receive.
>>>> (resetCB, refresh, viewButtonCB, getScreen, populate): Change the custom
>> ....
>>>> +            self.stripeGraph.selectSliceFromObj(device)
>>>> +
>>>> +        elif isinstance(device, storage.LVMVolumeGroupDevice):
>>>> +            if not isinstance(self.stripeGraph, LVMStripeGraph):
>>>> +                self.stripeGraph.shutDown()
>>>> +                self.stripeGraph = LVMStripeGraph(self.tree, self.editCB, self.storage, device)
>>>> +            self.stripeGraph.setDisplayed(device)
>>>> +
>>>> +        elif isinstance(device, storage.LVMLogicalVolumeDevice):
>>>> +            if not isinstance(self.stripeGraph, LVMStripeGraph):
>>>> +                self.stripeGraph.shutDown()
>>>> +                self.stripeGraph = LVMStripeGraph(self.tree, self.editCB, self.storage, device.vg)
>>>> +            self.stripeGraph.setDisplayed(device.vg)
>>>> +            self.stripeGraph.selectSliceFromObj(device)
>>>> +
>>>> +        elif isinstance(device, storage.MDRaidArrayDevice):
>>>> +            if not isinstance(self.stripeGraph, MDRaidArrayStripeGraph):
>>>> +                self.stripeGraph.shutDown()
>>>> +                self.stripeGraph = MDRaidArrayStripeGraph(self.tree, self.editCB, self.storage, device)
>>>> +            self.stripeGraph.setDisplayed(device)
>>>
>>> Is there a way to accomplish this stuff without using isinstance()?
>>
>> I could use the __class__ of the object.  Any thing against isinstance?
>
> This sort of code strikes me as not very object oriented.  Why not have a
> method on each of the *Device classes that takes in self.stripeGraph and then

This is how its coded.  If you look at each if, at the end there is a
self.stripeGraph.setDisplayed(device) .  This function is exactly what
you propose.  Additionally there is
self.stripeGraph.selectSliceFromObj(device), that also does its stuff
according to device.

I'm doing 2 things with is instance:
1. Getting the type of device that is selected in the tree view.
This is necessary to choose the correct object for the self.strpeGraph
object.

2.  Getting the current self.stripeGraph class.  If the current class is
different from what I need, I instantiate a new object.  If the class is
the same, I don't instantiate  a new graph object but set the device to
be displayed with the existing object.

I could create an intermediate class that handles all this.  This class
would have a list of possible graph objects to use and would not
instantiate new ones every time it is needed.  Aside from that, the code
would pretty much be the same.  I'll work on it today and post a patch.


THX for the review, much appreciated.

Regards.



> does what it needs to do specific to that class?  Could be reduced to:
>
>     device.display(self.stripeGraph, ...)
>
> Where ... is the other stuff necessary such as self.tree, self.editCB,
> self.storage, and so on.
>
> I just think that LVMVolumeGroupDevice, LVMLogicalVolumeDevice, and
> MDRaidArrayDevice should know how to display themselves given the right
> information.
>
>>>> +
>>>> +        else:
>>>> +            # Don't really want to do anything in this case.
>>>> +            return
>>>>
>>>>     def deleteCB(self, widget):
>>>>         """ Right now we can say that if the device is partitioned we
>>>> @@ -1367,15 +1399,15 @@ class PartitionWindow(InstallWindow):
>>>>     def resetCB(self, *args):
>>>>         if not confirmResetPartitionState(self.intf):
>>>>             return
>>>> -
>>>> -        self.diskStripeGraph.shutDown()
>>>> +
>>>> +        self.stripeGraph.shutDown()
>>>>         self.storage.reset()
>>>>         self.tree.clear()
>>>>         self.populate()
>>>>
>>>>     def refresh(self, justRedraw=None):
>>>>         log.debug("refresh: justRedraw=%s" % justRedraw)
>>>> -        self.diskStripeGraph.shutDown()
>>>> +        self.stripeGraph.shutDown()
>>>>         self.tree.clear()
>>>>
>>>>         if justRedraw:
>>>> @@ -1575,10 +1607,10 @@ class PartitionWindow(InstallWindow):
>>>>         vgeditor.destroy()
>>>>
>>>>     def viewButtonCB(self, widget):
>>>> -	self.show_uneditable = not widget.get_active()
>>>> -        self.diskStripeGraph.shutDown()
>>>> -	self.tree.clear()
>>>> -	self.populate()
>>>> +        self.show_uneditable = not widget.get_active()
>>>> +        self.stripeGraph.shutDown()
>>>> +        self.tree.clear()
>>>> +        self.populate()
>>>>
>>>>     def getScreen(self, anaconda):
>>>>         self.anaconda = anaconda
>>>> @@ -1623,8 +1655,7 @@ class PartitionWindow(InstallWindow):
>>>>         self.treeView.connect('row-activated', self.treeActivateCB)
>>>>         self.treeViewSelection = self.treeView.get_selection()
>>>>         self.treeViewSelection.connect("changed", self.treeSelectCB)
>>>> -        self.diskStripeGraph = DiskStripeGraph(self.tree, self.editCB,
>>>> -                                                storage = self.storage)
>>>> +        self.stripeGraph = StripeGraph(self.tree, self.editCB)
>>>>         self.populate(initial = 1)
>>>>
>>>>         # Create the top scroll window
>>>> @@ -1632,7 +1663,7 @@ class PartitionWindow(InstallWindow):
>>>>         hadj = gtk.Adjustment(step_incr = 5.0)
>>>>         vadj = gtk.Adjustment(step_incr = 5.0)
>>>>         swt = gtk.ScrolledWindow(hadjustment = hadj, vadjustment = vadj)
>>>> -        swt.add(self.diskStripeGraph.getCanvas())
>>>> +        swt.add(self.stripeGraph.getCanvas())
>>>>         swt.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
>>>>         swt.set_shadow_type(gtk.SHADOW_IN)
>>>>
>>>>
>>>
>>> The rest looks fine.
>>>
>>> - -- David Cantrell <dcantrell@xxxxxxxxxx>
>>> Red Hat / Honolulu, HI
>>>
>>> -----BEGIN PGP SIGNATURE-----
>>> Version: GnuPG v1.4.9 (GNU/Linux)
>>>
>>> iEYEARECAAYFAkq9WF4ACgkQ5hsjjIy1VkmurwCglDcx+3pqOH4HuXxU3HnZaqEL
>>> cs8AoMzwwXq/4AYHHfjFsE59k/GuwXPs
>>> =UvnX
>>> -----END PGP SIGNATURE-----
>>>
>>> _______________________________________________
>>> Anaconda-devel-list mailing list
>>> Anaconda-devel-list@xxxxxxxxxx
>>> https://www.redhat.com/mailman/listinfo/anaconda-devel-list
>>
>>
>
> - -- David Cantrell <dcantrell@xxxxxxxxxx>
> Red Hat / Honolulu, HI
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iEYEARECAAYFAkrGZhsACgkQ5hsjjIy1VkkMjQCfU0rn7o5eIcnBOHHHUTEcFqxO
> jJIAnRLmgfoPRr5uMPq8v1dRyXeu6xpO
> =wY0l
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> Anaconda-devel-list mailing list
> Anaconda-devel-list@xxxxxxxxxx
> https://www.redhat.com/mailman/listinfo/anaconda-devel-list

-- 
Joel Andres Granados
Brno, Czech Republic, Red Hat.

Attachment: pgpLcfbMKHHDF.pgp
Description: PGP signature

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux