Advertisement
Guest User

partition

a guest
Mar 19th, 2010
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 21.37 KB | None | 0 0
  1.  
  2. def get_types
  3.   return ["4.2BSD", "swap"]
  4. end
  5.  
  6. def set_disklabels
  7.   $disklabels = Hash.new
  8.   disks = $hdds.keys
  9.   disks.each do | disk |
  10.     $disklabels.store(disk, %w[a b d e f g h i j k l m n o p])
  11.   end
  12. end
  13.  
  14. def get_parts(disk)
  15.   return $disklabels.fetch(disk)
  16. end
  17.  
  18. def remove_part(disk, part)
  19.   $disklabels.fetch(disk).delete(part)
  20. end
  21.  
  22. def add_part(disk, part)
  23.   $disklabels.fetch(disk) << part
  24.   $disklabels.fetch(disk).sort!
  25. end
  26.  
  27. def part_exist(disk, part)
  28.   return $disklabels.fetch(disk).include?(part)
  29. end
  30.  
  31. def get_harddisks
  32.   command = SystemCall.new
  33.   $hdds = Hash.new
  34.  
  35.   command.exec("sysctl -n hw.disknames")
  36.    
  37.   command.stdout.each do | val |
  38.     disks = val.split(",")
  39.     disks.each do | disk |
  40.       if disk =~ /^[sw]d[0-9][0-9]*/
  41.         $hdds.store(disk.to_s, get_harddisk_size(disk))
  42.       end
  43.     end
  44.   end
  45. end
  46.  
  47. def set_current_size(disk, op, val)
  48.   current_size = $hdds.fetch(disk).to_f
  49.   if op == "+"
  50.   new_size = current_size + val
  51.   elsif op == "-"
  52.     new_size = current_size - val
  53.   end
  54.   $hdds.store(disk, new_size)
  55.   set_hddsizeLbl()
  56. end
  57.  
  58. def get_current_size(disk)
  59.   return $hdds.fetch(disk).to_f
  60. end
  61.  
  62. def get_current_size_sum
  63.   sum = 0.0
  64.   $hdds.each_value do | val |
  65.     sum = sum + val
  66.   end
  67.   return sum
  68. end
  69.  
  70. def get_harddisk_size(disk)
  71.   command = SystemCall.new
  72.  
  73.   command.exec("disklabel #{disk} | grep \"total sectors\"")
  74.   sectors = command.stdout.to_s
  75.  
  76.   command.exec("disklabel #{disk} | grep \"bytes/sector\"")
  77.   bytes = command.stdout.to_s
  78.    
  79.   sectors.gsub!("total sectors: ", "")
  80.   bytes.gsub!("bytes/sector: ", "")
  81.  
  82.   #XXX: Quick Hack!
  83.   # Fix It!!!
  84.   sectors.gsub!("\"", "").gsub!("[", "").gsub!("]", "")
  85.   bytes.gsub!("\"", "").gsub!("[", "").gsub!("]", "")
  86.                
  87.   size_byte = sectors.to_i(10) * bytes.to_i(10)
  88.   size_mbyte = size_byte / 1048576
  89.  
  90.   size_mbyte *= 0.95
  91.  
  92.   return size_mbyte
  93. end
  94.  
  95. def set_hddsizeLbl
  96.   disks = $hdds
  97.   label = "Space left:\n"
  98.   disks.each_pair do | key, val |
  99.     if val >= 1024
  100.       label = label + "#{key}: #{val / 1024} GB\n"
  101.     else
  102.       label = label + "#{key}: #{val.floor} MB\n"
  103.     end
  104.   end
  105.   $hddsizeLbl.text=(label)
  106. end
  107.  
  108. class PartitionChoice
  109.   attr_accessor :widget, :manual, :auto
  110.   def initialize   
  111.     image = Gtk::Image.new("icons/hdd_icon.png")
  112.     @widget = Gtk::Fixed.new
  113.     @manual = Gtk::RadioButton.new("I want to define the partitions on\nmy own (expert-mode)", true)
  114.     @auto = Gtk::RadioButton.new(@manual, "I want to use the auto-partition-feature", true)
  115.  
  116.     helpText = "What way for partitioning your\n" +
  117.                "harddrive(s) do you prefer?"
  118.  
  119.     help = Label.new(helpText).widget
  120.  
  121.     @widget.put(image, 40, 40)
  122.     @widget.put(help, 25,200)
  123.     @widget.put(@manual, 350, 150)
  124.     @widget.put(@auto, 350, 190)
  125.   end
  126.  
  127.   def set
  128.   end
  129.  
  130.   def validate
  131.   end
  132.  
  133.   def save
  134.     $config.store("partitionAuto", self.auto.active?)
  135.     $config.store("partitionManual", self.manual.active?)
  136.   end
  137. end
  138.  
  139. class PartitionManual
  140.   attr_accessor :widget
  141.   def initialize(window)
  142.  
  143.     $hddsizeLbl = Gtk::Label.new
  144.     get_harddisks()
  145.     set_hddsizeLbl()
  146.     set_disklabels()
  147.    
  148.     @widget = fixedMain = Gtk::Fixed.new
  149.     $addBtn = Gtk::Button.new(Gtk::Stock::ADD)
  150.     $delBtn = Gtk::Button.new(Gtk::Stock::DELETE)
  151.     bootableLbl = Gtk::Label.new("Root Disk:")
  152.     $bootable = Gtk::ComboBox.new(is_text_only = true)
  153.     $delBtn.sensitive=(false)
  154.     hdd_pic = image = Gtk::Image.new("icons/hdd_icon.png")
  155.     $partitionList = Array.new
  156.     $hdd = 0; $size = 1; $type = 2; $mountpoint = 3; $iter = 4; $part = 5;
  157.  
  158.     tree = Gtk::TreeView.new
  159.     tree.selection.mode = Gtk::SELECTION_BROWSE
  160.     renderer = Gtk::CellRendererText.new
  161.     renderer.set_fixed_size(100,20)
  162.     $store = Gtk::ListStore.new(String, String, String, String, String, String)
  163.  
  164.     hdd = Gtk::TreeViewColumn.new("\tHDD\t", renderer, "text" => $hdd)
  165.     size = Gtk::TreeViewColumn.new("\tSize (in MB)\t", renderer,
  166.                                    "text" => $size)
  167.     type = Gtk::TreeViewColumn.new("\tType\t", renderer, "text" => $type)
  168.     mountpoint = Gtk::TreeViewColumn.new("\tMountpoint\t", renderer,
  169.                                          "text" => $mountpoint)
  170.     iter = Gtk::TreeViewColumn.new("", renderer, "text" => $iter)
  171.     part = Gtk::TreeViewColumn.new("Partition", renderer, "text" => $part)
  172.    
  173.     treeToolTip = Gtk::Tooltips.new
  174.     deleteToolTip = Gtk::Tooltips.new
  175.     addToolTip = Gtk::Tooltips.new
  176.     exitToolTip = Gtk::Tooltips.new
  177.  
  178.     $hdds.keys.each do | hdd |
  179.       $bootable.append_text(hdd)
  180.     end
  181.  
  182.     $bootable.active=(0)
  183.  
  184.     treeToolTip.set_tip(tree, "double click to edit", "")
  185.     deleteToolTip.set_tip($delBtn, "click to delete selected partition", "")
  186.     addToolTip.set_tip($addBtn, "click to add a partition", "")
  187.  
  188.     tree.append_column(hdd)
  189.     tree.append_column(size)
  190.     tree.append_column(type)
  191.     tree.append_column(mountpoint)
  192.     tree.append_column(part)
  193.  
  194.     $addBtn.signal_connect("clicked") {
  195.       addDlg(window)
  196.       if (get_current_size_sum.floor <= 0)
  197.         $addBtn.sensitive=(false)
  198.       else
  199.         $addBtn.sensitive=(true)
  200.       end
  201.       validate()
  202.     }
  203.  
  204.     $delBtn.signal_connect("clicked") {
  205.       if (!tree.selection.selected.nil?)
  206.         hdd = tree.selection.selected[0]
  207.         hdd_name = tree.selection.selected[3]
  208.         add_part(hdd, tree.selection.selected[5])
  209.         set_current_size(hdd, "+", tree.selection.selected[1].to_f)
  210.         $partitionList.delete_at(tree.selection.selected[4].to_i)
  211.     $store.remove(tree.selection.selected)
  212.         if (get_current_size_sum.floor > 1)
  213.           $addBtn.sensitive=(true)
  214.         end
  215.         if ($partitionList.size < 0)
  216.           $delBtn.sensitive=(false)
  217.         end
  218.       end
  219.       validate()
  220.     }
  221.  
  222.     tree.selection.signal_connect("changed") {
  223.       if $partitionList.size > 0
  224.         $delBtn.sensitive=(true)
  225.       else
  226.         $delBtn.sensitive=(false)
  227.       end
  228.     }
  229.  
  230.     tree.signal_connect("row-activated") {
  231.       editDlg(window, tree.selection.selected)
  232.       validate()
  233.     }
  234.  
  235.     $bootable.signal_connect("changed") {
  236.       validate()
  237.     }
  238.        
  239.     tree.model = $store
  240.     fixedMain.put($hddsizeLbl, 40, 200)
  241.     fixedMain.put(hdd_pic, 40, 40)
  242.     fixedMain.put(tree, 240, 50)
  243.     fixedMain.put($addBtn, 300, 420)
  244.     fixedMain.put($delBtn, 450, 420)
  245.     fixedMain.put(bootableLbl, 600, 430)
  246.     fixedMain.put($bootable, 700, 420)
  247.   end
  248.  
  249.   def add_hdd(hdd, size, mountpoint, type, part)
  250.     iter = $store.append
  251.     iter_num = iter.to_str.to_i
  252.     $partitionList[iter_num] = Partition.new(hdd.active_text,
  253.       size.value.to_s, type.active_text, mountpoint.text, iter_num.to_s, part.active_text)
  254.  
  255.     $store.set_value(iter, $hdd, $partitionList[iter_num].hdd)
  256.     $store.set_value(iter, $size, $partitionList[iter_num].size)
  257.     $store.set_value(iter, $mountpoint, $partitionList[iter_num].mountpoint)
  258.     $store.set_value(iter, $type, $partitionList[iter_num].type)
  259.     $store.set_value(iter, $iter, $partitionList[iter_num].iter.to_s)
  260.     $store.set_value(iter, $part, $partitionList[iter_num].part)
  261.     remove_part(hdd.active_text, part.active_text)
  262.   end
  263.  
  264.   def update_hdd(hdd, size, mountpoint, type, item, part)
  265.     index = item.to_str.to_i
  266.     $partitionList[index].hdd = hdd.active_text
  267.     $partitionList[index].size = size.value.to_s
  268.     $partitionList[index].mountpoint = mountpoint.text
  269.     $partitionList[index].type = type.active_text
  270.     $partitionList[index].iter = index.to_s
  271.     $partitionList[index].part = part.active_text
  272.     $store.set_value(item, $hdd, hdd.active_text)
  273.     $store.set_value(item, $size, size.value.to_s)
  274.     $store.set_value(item, $mountpoint, mountpoint.text)
  275.     $store.set_value(item, $type, type.active_text)
  276.     $store.set_value(item, $iter, index.to_s)
  277.     $store.set_value(item, $part, part.active_text)
  278.     remove_part(hdd.active_text, part.active_text)
  279.   end
  280.  
  281.   def editDlg(parent, item)
  282.     dialog = Gtk::Dialog.new(
  283.       "Edit Partition",
  284.       parent,
  285.       Gtk::Dialog::MODAL,
  286.       [ Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK ],
  287.       [ Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL ]
  288.     )
  289.     dialog.default_response = Gtk::Dialog::RESPONSE_CANCEL
  290.     dialog.default_width=(400)
  291.     dialog.default_height=(300)
  292.  
  293.     dialog.window_position=(Gtk::Window::POS_CENTER_ALWAYS)
  294.  
  295.     hddLbl = Gtk::Label.new("HDD:")
  296.     mountpointLbl = Gtk::Label.new("Mountpoint:")
  297.     sizeLbl = Gtk::Label.new("Size (in MB):")
  298.     typeLbl = Gtk::Label.new("Type:")
  299.     partLbl = Gtk::Label.new("Partition:")
  300.  
  301.     hdd = Gtk::ComboBox.new(is_text_only = true)
  302.     mountpoint = Gtk::Entry.new
  303.     type = Gtk::ComboBox.new(is_text_only = true)
  304.     part = Gtk::ComboBox.new(true)
  305.  
  306.     editableAry = Array.new
  307.     hddAry = $hdds.keys
  308.     typeAry = get_types()
  309.  
  310.     hddAry.each do | element |
  311.       if element == item[0] || !(get_current_size(element).floor <= 0)
  312.         hdd.append_text(element.to_s)
  313.         editableAry << element.to_s
  314.       end
  315.     end
  316.  
  317.     typeAry.each do | element |
  318.       type.append_text(element)
  319.     end
  320.  
  321.     size_value = get_current_size(item[0]) + item[1].to_f
  322.     size = Gtk::HScale.new(0, size_value, 1)
  323.  
  324.     hdd.active=(editableAry.index(item[0]))
  325.     size.value = item[1].to_f
  326.     type.active=(typeAry.index(item[2]))
  327.  
  328.     mountpoint.text = mountpoint_orig = item[3]
  329.     if item[2] == "swap"
  330.       mountpoint.sensitive=(false)
  331.     else
  332.       mountpoint.sensitive=(true)
  333.     end
  334.  
  335.     if !part_exist(item[0], item[5])
  336.       add_part(item[0], item[5])
  337.     end
  338.  
  339.     partsAry = get_parts(item[0])
  340.  
  341.     partsAry.each do | element |
  342.       part.append_text(element)
  343.     end
  344.  
  345.     part.active=(partsAry.index(item[5]))
  346.  
  347.     hdd.signal_connect('changed') {
  348.       partsAry.size.times do
  349.         part.remove_text(0)
  350.       end
  351.  
  352.       partsAryNew = get_parts(hdd.active_text)
  353.       partsAryNew.each do | element |
  354.         part.insert_text(partsAryNew.index(element), element)
  355.       end
  356.       if hdd.active_text != item[0]
  357.         part.active=(0)
  358.       else
  359.         part.active=(partsAry.index(item[5]))  
  360.       end
  361.  
  362.       if hdd.active_text == item[0]
  363.         size_val = get_current_size(hdd.active_text) + item[1].to_f
  364.       else
  365.         size_val = get_current_size(hdd.active_text)
  366.       end
  367.        
  368.       adjustment = Gtk::Adjustment.new(0, 0, size_val, 1, 10, 0)
  369.       size.adjustment=(adjustment)
  370.     }
  371.  
  372.     type.signal_connect('changed') {
  373.       if type.active_text == "swap"
  374.         mountpoint.text = ""
  375.         mountpoint.sensitive=(false)
  376.       else
  377.         mountpoint.sensitive=(true)
  378.       end
  379.     }
  380.      
  381.     table = Gtk::Table.new(9, 2, true)
  382.     table.attach_defaults(hddLbl,    0, 1, 0, 1)
  383.     table.attach_defaults(mountpointLbl, 0, 1, 2, 3)
  384.     table.attach_defaults(sizeLbl,   0, 1, 4, 5)
  385.     table.attach_defaults(typeLbl,   0, 1, 6, 7)
  386.     table.attach_defaults(partLbl,   0, 1, 8, 9)
  387.  
  388.     table.attach_defaults(hdd,       1, 2, 0, 1)
  389.     table.attach_defaults(mountpoint,    1, 2, 2, 3)
  390.     table.attach_defaults(size,      1, 2, 4, 5)
  391.     table.attach_defaults(type,      1, 2, 6, 7)
  392.     table.attach_defaults(part,      1, 2, 8, 9)
  393.  
  394.     table.row_spacings = 5
  395.     table.column_spacings = 5
  396.     table.border_width = 10
  397.  
  398.     dialog.vbox.add(table)
  399.     dialog.show_all
  400.     dialog.run do |response|
  401.       if response == Gtk::Dialog::RESPONSE_OK
  402.         if (size.value > 0  && (validate_mp(mountpoint.text, true, mountpoint_orig, hdd.active_text, part.active_text) || type.active_text == "swap"))
  403.           #plus old value to old hdd
  404.           set_current_size(item[0], "+", item[1].to_f)
  405.           update_hdd(hdd, size, mountpoint, type, item, part)
  406.           #minus new value to new hdd
  407.           set_current_size(hdd.active_text, "-", size.value.to_f)
  408.           if (get_current_size_sum().floor <= 1)
  409.             $addBtn.sensitive=(false)
  410.           else
  411.             $addBtn.sensitive=(true)
  412.           end
  413.           dialog.destroy
  414.         else
  415.           image = Gtk::Image.new("icons/dialog-error.png")
  416.           box = Gtk::Fixed.new
  417.  
  418.           case validate_mp(mountpoint.text, false, nil, hdd.active_text, part.active_text)
  419.           when  Partition::EMPTY_NAME
  420.             label = "Mountpoint cant be empty"
  421.           when Partition::INVALID_NAME
  422.             label = "Invalid mountpoint"
  423.           when Partition::ALREADY_EXIST
  424.             label = "Mountpoint already exists"
  425.           when Partition::INVALID_ROOT
  426.             label = "The root-dir (\"/\") have to be on the\n"
  427.             label += "root-disk and receive the Partition \"a\""
  428.           end
  429.           label = "invalid partition size" if size.value <= 0
  430.           errorLbl = Gtk::Label.new(label)
  431.  
  432.           error = Gtk::Dialog.new("Error: #{label}",
  433.             dialog,
  434.             Gtk::Dialog::MODAL | Gtk::Dialog::DESTROY_WITH_PARENT,
  435.             [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_ACCEPT]
  436.           )
  437.  
  438.           error.signal_connect('response') {
  439.             error.destroy
  440.             dialog.destroy
  441.             editDlg(parent, item)
  442.           }
  443.  
  444.           error.set_size_request(400, 200)
  445.  
  446.           box.put(image, 20, 10)
  447.           box.put(errorLbl, 130, 15)
  448.           error.vbox.add(box)
  449.           error.show_all
  450.         end
  451.       elsif response = Gtk::Dialog::RESPONSE_CANCEL
  452.         remove_part(item[0], item[5])
  453.         dialog.destroy
  454.         break
  455.       else
  456.         remove_part(item[0], item[5])
  457.         break
  458.       end
  459.     end
  460.   end
  461.  
  462.   def addDlg (parent)
  463.     dialog = Gtk::Dialog.new(
  464.       "Add Partition",
  465.        parent,
  466.        Gtk::Dialog::MODAL,
  467.        [ Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK ],
  468.        [ Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL ]
  469.     )
  470.     dialog.default_response = Gtk::Dialog::RESPONSE_CANCEL
  471.     dialog.default_width=(400)
  472.     dialog.default_height=(300)
  473.  
  474.     dialog.window_position=(Gtk::Window::POS_CENTER_ALWAYS)
  475.  
  476.     hddLbl = Gtk::Label.new("HDD:")
  477.     mountpointLbl = Gtk::Label.new("Mountpoint:")
  478.     sizeLbl = Gtk::Label.new("Size (in MB):")
  479.     typeLbl = Gtk::Label.new("Type:")
  480.     partLbl = Gtk::Label.new("Partition:")
  481.  
  482.     hdd = Gtk::ComboBox.new(is_text_only = true)
  483.     mountpoint = Gtk::Entry.new
  484.     type = Gtk::ComboBox.new(is_text_only = true)
  485.     part = Gtk::ComboBox.new(is_text_only = true)
  486.      
  487.     hddAry = $hdds.keys
  488.     typeAry = get_types()
  489.  
  490.     i = 0
  491.     hddAry.each do | element |
  492.       if !(get_current_size(element).floor <= 0)
  493.         hdd.append_text(element.to_s)
  494.         i = i + 1
  495.       end
  496.     end
  497.  
  498.     if i == 0
  499.       # no space for new partitions
  500.       # => self.destruction
  501.       dialog.destroy
  502.       return
  503.     end
  504.  
  505.     typeAry.each do | element |
  506.       type.append_text(element)
  507.     end
  508.  
  509.     type.active=(0)
  510.     hdd.active=(0)
  511.  
  512.     size = Gtk::HScale.new(0, get_current_size(hdd.active_text), 1)
  513.  
  514.     partsAry = get_parts(hdd.active_text)
  515.  
  516.     partsAry.each do | element |
  517.       part.append_text(element)
  518.     end
  519.  
  520.     part.active=(0)
  521.  
  522.     hdd.signal_connect('changed') {
  523.       partsAry.size.times do
  524.         part.remove_text(0)
  525.       end
  526.  
  527.       partsAryNew = get_parts(hdd.active_text)
  528.       partsAryNew.each do | element |
  529.         part.insert_text(partsAryNew.index(element), element)
  530.       end
  531.       part.active=(0)
  532.       adjustment = Gtk::Adjustment.new(0, 0, get_current_size(hdd.active_text), 1, 10, 0)
  533.       size.adjustment=(adjustment)
  534.     }
  535.  
  536.     type.signal_connect('changed') {
  537.       if type.active_text == "swap"
  538.         mountpoint.text = ""
  539.         mountpoint.sensitive=(false)
  540.       else
  541.         mountpoint.sensitive=(true)
  542.       end
  543.     }
  544.  
  545.     table = Gtk::Table.new(9, 2, true)
  546.     table.attach_defaults(hddLbl,    0, 1, 0, 1)
  547.     table.attach_defaults(mountpointLbl, 0, 1, 2, 3)
  548.     table.attach_defaults(sizeLbl,   0, 1, 4, 5)
  549.     table.attach_defaults(typeLbl,   0, 1, 6, 7)
  550.     table.attach_defaults(partLbl,   0, 1, 8, 9)
  551.  
  552.     table.attach_defaults(hdd,      1, 2, 0, 1)
  553.     table.attach_defaults(mountpoint,   1, 2, 2, 3)
  554.     table.attach_defaults(size,     1, 2, 4, 5)  
  555.     table.attach_defaults(type,     1, 2, 6, 7)
  556.     table.attach_defaults(part,     1, 2, 8, 9)
  557.  
  558.     table.row_spacings = 5
  559.     table.column_spacings = 5
  560.     table.border_width = 10
  561.  
  562.     dialog.vbox.add(table)
  563.     dialog.show_all
  564.     dialog.run { |response|
  565.       if response == Gtk::Dialog::RESPONSE_OK
  566.         if (size.value > 0 && (validate_mp(mountpoint.text, true, nil, hdd.active_text, part.active_text) || type.active_text == "swap"))
  567.           add_hdd(hdd, size, mountpoint, type, part)
  568.           if (get_current_size_sum().floor <= 1)
  569.             $addBtn.sensitive=(false)
  570.           end
  571.           set_current_size(hdd.active_text, "-", size.value.to_f)
  572.          
  573.           dialog.destroy
  574.         else
  575.           image = Gtk::Image.new("icons/dialog-error.png")
  576.           box = Gtk::Fixed.new
  577.           case validate_mp(mountpoint.text, false, nil, hdd.active_text, part.active_text)
  578.           when Partition::EMPTY_NAME
  579.             label = "Mountpoint cant be empty"
  580.           when Partition::INVALID_NAME
  581.             label = "Invalid mountpoint"
  582.           when Partition::ALREADY_EXIST
  583.             label = "Mountpoint already exists"
  584.           when Partition::INVALID_ROOT
  585.             label = "The root-dir (\"/\") have to be on the\n"
  586.             label += "root-disk and receive the Partition \"a\""
  587.           end
  588.           label = "invalid partition size" if size.value <= 0
  589.           errorLbl = Gtk::Label.new(label)
  590.  
  591.           error = Gtk::Dialog.new("Error: #{label}",
  592.             dialog,
  593.             Gtk::Dialog::MODAL | Gtk::Dialog::DESTROY_WITH_PARENT,
  594.             [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_ACCEPT]
  595.           )
  596.  
  597.           error.signal_connect('response') {
  598.             error.destroy
  599.            dialog.destroy
  600.            addDlg(parent)
  601.           }
  602.  
  603.           error.set_size_request(400, 200)
  604.  
  605.           box.put(image, 20, 10)
  606.           box.put(errorLbl, 130, 15)
  607.           error.vbox.add(box)
  608.           error.show_all
  609.         end
  610.       elsif response = Gtk::Dialog::RESPONSE_CANCEL
  611.         dialog.destroy
  612.         break
  613.       else
  614.         break
  615.       end
  616.     }
  617.   end
  618.  
  619.   def validate_mp(mountpoint, use_boolean = false, mountpoint_orig = "", hdd, part)
  620.     rCode = Partition::FINE
  621.     rCode = true if use_boolean
  622.     if mountpoint.empty?
  623.       rCode = Partition::EMPTY_NAME
  624.       rCode = false if use_boolean
  625.     end
  626.     if mountpoint !~ /^[\/][A-z0-9\/_-]*$/
  627.       rCode = Partition::INVALID_NAME
  628.       rCode = false if use_boolean
  629.     end
  630.     if mountpoint != mountpoint_orig
  631.       $partitionList.each do | partition |
  632.         if partition.mountpoint == mountpoint
  633.           rCode = Partition::ALREADY_EXIST
  634.           rCode = false if use_boolean
  635.         end
  636.       end
  637.     end
  638.     if mountpoint == "/"
  639.       if part != "a" || hdd != $bootable.active_text
  640.         rCode = Partition::INVALID_ROOT
  641.         rCode = false if use_boolean
  642.       end
  643.     end
  644.     return rCode
  645.   end
  646.  
  647.   def set
  648.   end
  649.  
  650.   def validate
  651.     mountpoints = Array.new
  652.     $partitionList.each do | partition |
  653.       mountpoints << partition.mountpoint
  654.       if partition.mountpoint == "/" && partition.hdd == $bootable.active_text
  655.         self.widget.parent.set_page_complete(self.widget, true)
  656.       elsif partition.mountpoint == "/" && partition.hdd != $bootable.active_text
  657.         self.widget.parent.set_page_complete(self.widget, false)
  658.       end
  659.     end
  660.     if !mountpoints.include?("/")
  661.       self.widget.parent.set_page_complete(self.widget, false)
  662.     end
  663.   end
  664.  
  665.   def save
  666.     if $config.fetch("partitionManual")
  667.       iter = 0
  668.       partitions = Hash.new
  669.       $partitionList.each do | partition |
  670.         partitions.store("partition#{iter}", partition)
  671.         iter = iter + 1
  672.       end
  673.       $config.store("Partitions", partitions)
  674.       $config.store("Bootable-Disk", $bootable.active_text)
  675.     elsif $config.has_key?("Partitions") && !$config.fetch("partitionManual")
  676.       $config.delete("Partitions")
  677.     end
  678.   end
  679.  
  680. end
  681.  
  682. class PartitionAuto
  683.  
  684.   attr_accessor :widget, :hdd
  685.  
  686.   def initialize
  687.     label = "Auto Partition"
  688.     @label = Label.new(label)
  689.     image = Gtk::Image.new("icons/hdd_icon.png")
  690.     hddAry = $hdds.keys
  691.     @hdd = DropDown.new("Harddisk\t\t", hddAry )
  692.     hdd_size = Label.new
  693.     hdd_size.widget.text=("HDD-Size:\t\t#{get_harddisk_size(@hdd.comboBox.active_text)} MB")
  694.  
  695.     @hdd.comboBox.signal_connect('changed') {
  696.       hdd_size.widget.text=("HDD-Size:\t\t#{get_harddisk_size(@hdd.comboBox.active_text)} MB")
  697.     }
  698.  
  699.     @widget = Gtk::Fixed.new
  700.     @widget.put(image, 40, 40)
  701.     @widget.put(@label.widget, 300, 100)
  702.     @widget.put(@hdd.widget, 340, 150)
  703.     @widget.put(hdd_size.widget, 340, 190)
  704.   end
  705.  
  706.   def set
  707.   end
  708.  
  709.   def validate
  710.   end
  711.  
  712.   def save
  713.     if $config.fetch("partitionAuto")
  714.       $config.store("AutoDisk", self.hdd.comboBox.active_text)
  715.       $config.store("Bootable-Disk", self.hdd.comboBox.active_text)
  716.     elsif $config.has_key?("AutoDisk") && !$config.fetch("partitionAuto")
  717.       $config.delete("AutoDisk")
  718.       $config.delete("Bootable-Disk")
  719.     end
  720.   end
  721.  
  722. end
  723.  
  724. class Partition
  725.  
  726.   attr_accessor :hdd, :size, :type, :mountpoint, :iter, :part
  727.  
  728.   FINE=0
  729.   ALREADY_EXIST=1
  730.   INVALID_NAME=2
  731.   INVALID_SIZE=3
  732.   EMPTY_NAME=4
  733.   INVALID_ROOT=5
  734.  
  735.   def initialize(a, b, c, d, e, f)
  736.     @hdd, @size, @type, @mountpoint, @iter, @part= a, b, c, d, e, f;
  737.   end
  738.  
  739. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement