[gnome-disk-utility/wip/mdraid] Start working on the "Create RAID Array" dialog
- From: David Zeuthen <davidz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-disk-utility/wip/mdraid] Start working on the "Create RAID Array" dialog
- Date: Sun, 23 Sep 2012 14:34:14 +0000 (UTC)
commit 731cfe7501ef7f83dc7bae9f6d483700a2e7ca6e
Author: David Zeuthen <zeuthen gmail com>
Date: Sun Sep 23 10:33:59 2012 -0400
Start working on the "Create RAID Array" dialog
Signed-off-by: David Zeuthen <zeuthen gmail com>
data/ui/Makefile.am | 1 +
data/ui/create-raid-array-dialog.ui | 479 ++++++++++++++++++++++++++++++++++
src/disks/Makefile.am | 1 +
src/disks/gducreateraidarraydialog.c | 313 ++++++++++++++++++++++
src/disks/gducreateraidarraydialog.h | 22 ++
src/disks/gduwindow.c | 3 +-
6 files changed, 818 insertions(+), 1 deletions(-)
---
diff --git a/data/ui/Makefile.am b/data/ui/Makefile.am
index bb68fb7..35d6596 100644
--- a/data/ui/Makefile.am
+++ b/data/ui/Makefile.am
@@ -25,6 +25,7 @@ ui_DATA = \
benchmark-dialog.ui \
disk-settings-dialog.ui \
md-raid-disks-dialog.ui \
+ create-raid-array-dialog.ui \
$(NULL)
EXTRA_DIST = \
diff --git a/data/ui/create-raid-array-dialog.ui b/data/ui/create-raid-array-dialog.ui
new file mode 100644
index 0000000..1380cb6
--- /dev/null
+++ b/data/ui/create-raid-array-dialog.ui
@@ -0,0 +1,479 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkDialog" id="create-raid-array-dialog">
+ <property name="width_request">500</property>
+ <property name="height_request">550</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">12</property>
+ <property name="title" translatable="yes">Create RAID Array</property>
+ <property name="type_hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button1">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button2">
+ <property name="label" translatable="yes">C_reate...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="row_spacing">10</property>
+ <property name="column_spacing">10</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">RAID _Level</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">level-combobox</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="level-combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="id_column">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Chunk _Size</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">chunk-combobox</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Name</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">name-entry</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="chunk-combobox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="id_column">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="name-entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="invisible_char">â</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes"><b>_Disks</b></property>
+ <property name="use_markup">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">24</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkBox" id="box3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow">
+ <property name="width_request">300</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_expanders">False</property>
+ <property name="level_indentation">12</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="toolbar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_size">1</property>
+ <child>
+ <object class="GtkToolButton" id="add-toolbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip_markup" translatable="yes">Add Disk...</property>
+ <property name="tooltip_text" translatable="yes">Add Disk...</property>
+ <property name="label" translatable="yes">Add Disk...</property>
+ <property name="use_underline">True</property>
+ <property name="icon_name">list-add-symbolic</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="remove-toolbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip_markup" translatable="yes">Remove Disk...</property>
+ <property name="tooltip_text" translatable="yes">Remove Disk...</property>
+ <property name="label" translatable="yes">Remove Disk...</property>
+ <property name="use_underline">True</property>
+ <property name="icon_name">list-remove-symbolic</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSeparatorToolItem" id="toolbutton1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="up-toolbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip_markup" translatable="yes">Move Disk Up</property>
+ <property name="tooltip_text" translatable="yes">Move Disk Up</property>
+ <property name="label" translatable="yes">Move Disk Up</property>
+ <property name="use_underline">True</property>
+ <property name="icon_name">go-up-symbolic</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="down-toolbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_markup" translatable="yes">Move Disk Down</property>
+ <property name="tooltip_text" translatable="yes">Move Disk Down</property>
+ <property name="label" translatable="yes">Move Disk Down</property>
+ <property name="use_underline">True</property>
+ <property name="icon_name">go-down-symbolic</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="row_spacing">10</property>
+ <property name="column_spacing">10</property>
+ <child>
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Serial Number</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Assessment</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="serial-label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="selectable">True</property>
+ <property name="ellipsize">end</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="assessment-label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="selectable">True</property>
+ <property name="ellipsize">end</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Model or Name</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="model-label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="selectable">True</property>
+ <property name="ellipsize">end</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Device</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="device-label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="xalign">0</property>
+ <property name="selectable">True</property>
+ <property name="ellipsize">end</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">button1</action-widget>
+ <action-widget response="-5">button2</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/src/disks/Makefile.am b/src/disks/Makefile.am
index aee0ece..e75d229 100644
--- a/src/disks/Makefile.am
+++ b/src/disks/Makefile.am
@@ -48,6 +48,7 @@ gnome_disks_SOURCES = \
gduchangepassphrasedialog.h gduchangepassphrasedialog.c \
gdudisksettingsdialog.h gdudisksettingsdialog.c \
gdumdraiddisksdialog.h gdumdraiddisksdialog.c \
+ gducreateraidarraydialog.h gducreateraidarraydialog.c \
$(enum_built_sources) \
$(NULL)
diff --git a/src/disks/gducreateraidarraydialog.c b/src/disks/gducreateraidarraydialog.c
new file mode 100644
index 0000000..9a45c24
--- /dev/null
+++ b/src/disks/gducreateraidarraydialog.c
@@ -0,0 +1,313 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2008-2012 Red Hat, Inc.
+ *
+ * Licensed under GPL version 2 or later.
+ *
+ * Author: David Zeuthen <zeuthen gmail com>
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include <math.h>
+
+#include "gduapplication.h"
+#include "gduwindow.h"
+#include "gducreateraidarraydialog.h"
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+typedef struct
+{
+ volatile gint ref_count;
+
+ gboolean in_update;
+
+ UDisksClient *client;
+ GduWindow *window;
+ GtkBuilder *builder;
+
+ GtkWidget *dialog;
+
+ GtkWidget *scrolledwindow;
+ GtkWidget *treeview;
+
+ GtkWidget *toolbar;
+ GtkWidget *add_toolbutton;
+ GtkWidget *remove_toolbutton;
+ GtkWidget *up_toolbutton;
+ GtkWidget *down_toolbutton;
+
+ GtkWidget *level_combobox;
+ GtkWidget *chunk_combobox;
+ GtkWidget *name_entry;
+
+ GtkListStore *store;
+} DialogData;
+
+static const struct {
+ goffset offset;
+ const gchar *name;
+} widget_mapping[] = {
+ {G_STRUCT_OFFSET (DialogData, scrolledwindow), "scrolledwindow"},
+ {G_STRUCT_OFFSET (DialogData, treeview), "treeview"},
+
+ {G_STRUCT_OFFSET (DialogData, toolbar), "toolbar"},
+ {G_STRUCT_OFFSET (DialogData, add_toolbutton), "add-toolbutton"},
+ {G_STRUCT_OFFSET (DialogData, remove_toolbutton), "remove-toolbutton"},
+ {G_STRUCT_OFFSET (DialogData, up_toolbutton), "up-toolbutton"},
+ {G_STRUCT_OFFSET (DialogData, down_toolbutton), "down-toolbutton"},
+
+ {G_STRUCT_OFFSET (DialogData, level_combobox), "level-combobox"},
+ {G_STRUCT_OFFSET (DialogData, chunk_combobox), "chunk-combobox"},
+ {G_STRUCT_OFFSET (DialogData, name_entry), "name-entry"},
+
+ {0, NULL}
+};
+
+static void update_dialog (DialogData *data);
+
+
+static void on_client_changed (UDisksClient *client,
+ gpointer user_data);
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+G_GNUC_UNUSED static DialogData *
+dialog_data_ref (DialogData *data)
+{
+ g_atomic_int_inc (&data->ref_count);
+ return data;
+}
+
+static void
+dialog_data_unref (DialogData *data)
+{
+ if (g_atomic_int_dec_and_test (&data->ref_count))
+ {
+ if (data->dialog != NULL)
+ {
+ gtk_widget_hide (data->dialog);
+ gtk_widget_destroy (data->dialog);
+ data->dialog = NULL;
+ }
+
+ g_signal_handlers_disconnect_by_func (data->client,
+ G_CALLBACK (on_client_changed),
+ data);
+
+ g_clear_object (&data->window);
+ g_clear_object (&data->builder);
+
+ g_free (data);
+ }
+}
+
+static void
+dialog_data_close (DialogData *data)
+{
+ gtk_dialog_response (GTK_DIALOG (data->dialog), GTK_RESPONSE_CANCEL);
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+static void
+update_dialog (DialogData *data)
+{
+ /* don't recurse */
+ if (data->in_update)
+ goto out;
+
+ data->in_update = TRUE;
+ /* TODO */
+ data->in_update = FALSE;
+
+ out:
+ ;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+G_GNUC_UNUSED static void
+on_property_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ DialogData *data = user_data;
+ update_dialog (data);
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+enum
+{
+ COMBOBOX_MODEL_COLUMN_ID,
+ COMBOBOX_MODEL_COLUMN_MARKUP,
+ COMBOBOX_MODEL_COLUMN_SEPARATOR,
+ COMBOBOX_MODEL_COLUMN_SENSITIVE,
+ COMBOBOX_MODEL_N_COLUMNS,
+};
+
+static gboolean
+combobox_separator_func (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ gboolean is_separator;
+ gtk_tree_model_get (model, iter,
+ COMBOBOX_MODEL_COLUMN_SEPARATOR, &is_separator,
+ -1);
+ return is_separator;
+}
+
+static GtkListStore *
+combobox_init (DialogData *data,
+ GtkWidget *combobox)
+{
+ GtkListStore *model;
+ GtkCellRenderer *renderer;
+
+ model = gtk_list_store_new (COMBOBOX_MODEL_N_COLUMNS,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN);
+ gtk_combo_box_set_model (GTK_COMBO_BOX (combobox), GTK_TREE_MODEL (model));
+ g_object_unref (model);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, FALSE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
+ "markup", COMBOBOX_MODEL_COLUMN_MARKUP,
+ "sensitive", COMBOBOX_MODEL_COLUMN_SENSITIVE,
+ NULL);
+
+ gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
+ combobox_separator_func,
+ data,
+ NULL); /* GDestroyNotify */
+
+ return model;
+}
+
+static void
+combobox_add_item (GtkListStore *model,
+ const gchar *markup,
+ const gchar *id)
+{
+ gtk_list_store_insert_with_values (model, NULL /* out_iter */, G_MAXINT, /* position */
+ COMBOBOX_MODEL_COLUMN_ID, id,
+ COMBOBOX_MODEL_COLUMN_MARKUP, markup,
+ COMBOBOX_MODEL_COLUMN_SENSITIVE, TRUE,
+ -1);
+}
+
+G_GNUC_UNUSED static void
+combobox_add_separator (GtkListStore *model)
+{
+ gtk_list_store_insert_with_values (model, NULL /* out_iter */, G_MAXINT, /* position */
+ COMBOBOX_MODEL_COLUMN_SEPARATOR, TRUE,
+ COMBOBOX_MODEL_COLUMN_SENSITIVE, TRUE,
+ -1);
+}
+
+static void
+init_dialog (DialogData *data)
+{
+ GtkStyleContext *context;
+ GtkListStore *model;
+ gchar *s;
+
+ context = gtk_widget_get_style_context (data->scrolledwindow);
+ gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM);
+ context = gtk_widget_get_style_context (data->toolbar);
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_INLINE_TOOLBAR);
+ gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP);
+
+ /* 'RAID Level' combobox */
+ model = combobox_init (data, data->level_combobox);
+ s = gdu_utils_format_mdraid_level ("raid0", TRUE); combobox_add_item (model, s, "raid0"); g_free (s);
+ s = gdu_utils_format_mdraid_level ("raid1", TRUE); combobox_add_item (model, s, "raid1"); g_free (s);
+ s = gdu_utils_format_mdraid_level ("raid4", TRUE); combobox_add_item (model, s, "raid4"); g_free (s);
+ s = gdu_utils_format_mdraid_level ("raid5", TRUE); combobox_add_item (model, s, "raid5"); g_free (s);
+ s = gdu_utils_format_mdraid_level ("raid6", TRUE); combobox_add_item (model, s, "raid6"); g_free (s);
+ s = gdu_utils_format_mdraid_level ("raid10", TRUE); combobox_add_item (model, s, "raid10"); g_free (s);
+
+ model = combobox_init (data, data->chunk_combobox);
+ s = udisks_client_get_size_for_display (data->client, 4*1024, TRUE, FALSE); combobox_add_item (model, s, "chunk_4"); g_free (s);
+ s = udisks_client_get_size_for_display (data->client, 8*1024, TRUE, FALSE); combobox_add_item (model, s, "chunk_8"); g_free (s);
+ s = udisks_client_get_size_for_display (data->client, 16*1024, TRUE, FALSE); combobox_add_item (model, s, "chunk_16"); g_free (s);
+ s = udisks_client_get_size_for_display (data->client, 32*1024, TRUE, FALSE); combobox_add_item (model, s, "chunk_32"); g_free (s);
+ s = udisks_client_get_size_for_display (data->client, 64*1024, TRUE, FALSE); combobox_add_item (model, s, "chunk_64"); g_free (s);
+ s = udisks_client_get_size_for_display (data->client, 128*1024, TRUE, FALSE); combobox_add_item (model, s, "chunk_128"); g_free (s);
+ s = udisks_client_get_size_for_display (data->client, 256*1024, TRUE, FALSE); combobox_add_item (model, s, "chunk_256"); g_free (s);
+ s = udisks_client_get_size_for_display (data->client, 512*1024, TRUE, FALSE); combobox_add_item (model, s, "chunk_512"); g_free (s);
+ s = udisks_client_get_size_for_display (data->client,1024*1024, TRUE, FALSE); combobox_add_item (model, s, "chunk_1024"); g_free (s);
+ s = udisks_client_get_size_for_display (data->client,2048*1024, TRUE, FALSE); combobox_add_item (model, s, "chunk_2048"); g_free (s);
+
+
+ /* defaults: RAID6, 512 KiB Chunk */
+ gtk_combo_box_set_active_id (GTK_COMBO_BOX (data->level_combobox), "raid6");
+ gtk_combo_box_set_active_id (GTK_COMBO_BOX (data->chunk_combobox), "chunk_512");
+
+ update_dialog (data);
+}
+
+static void
+on_client_changed (UDisksClient *client,
+ gpointer user_data)
+{
+ DialogData *data = user_data;
+ update_dialog (data);
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
+
+void
+gdu_create_raid_array_dialog_show (GduWindow *window)
+{
+ DialogData *data;
+ guint n;
+
+ data = g_new0 (DialogData, 1);
+ data->ref_count = 1;
+ data->window = g_object_ref (window);
+ data->client = gdu_window_get_client (data->window);
+
+ data->dialog = GTK_WIDGET (gdu_application_new_widget (gdu_window_get_application (window),
+ "create-raid-array-dialog.ui",
+ "create-raid-array-dialog",
+ &data->builder));
+ for (n = 0; widget_mapping[n].name != NULL; n++)
+ {
+ gpointer *p = (gpointer *) ((char *) data + widget_mapping[n].offset);
+ *p = gtk_builder_get_object (data->builder, widget_mapping[n].name);
+ }
+
+ gtk_window_set_transient_for (GTK_WINDOW (data->dialog), GTK_WINDOW (window));
+
+ init_dialog (data);
+
+ while (TRUE)
+ {
+ gint response;
+ response = gtk_dialog_run (GTK_DIALOG (data->dialog));
+ /* Keep in sync with .ui file */
+ switch (response)
+ {
+ case GTK_RESPONSE_CLOSE: /* Close */
+ goto out;
+ break;
+
+ default:
+ goto out;
+ }
+ }
+ out:
+ dialog_data_close (data);
+ dialog_data_unref (data);
+}
+
diff --git a/src/disks/gducreateraidarraydialog.h b/src/disks/gducreateraidarraydialog.h
new file mode 100644
index 0000000..f8fd39e
--- /dev/null
+++ b/src/disks/gducreateraidarraydialog.h
@@ -0,0 +1,22 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2008-2012 Red Hat, Inc.
+ *
+ * Licensed under GPL version 2 or later.
+ *
+ * Author: David Zeuthen <zeuthen gmail com>
+ */
+
+#ifndef __GDU_CREATE_RAID_ARRAY_DIALOG_H__
+#define __GDU_CREATE_RAID_ARRAY_DIALOG_H__
+
+#include <gtk/gtk.h>
+#include "gdutypes.h"
+
+G_BEGIN_DECLS
+
+void gdu_create_raid_array_dialog_show (GduWindow *window);
+
+G_END_DECLS
+
+#endif /* __GDU_CREATE_RAID_ARRAY_DIALOG_H__ */
diff --git a/src/disks/gduwindow.c b/src/disks/gduwindow.c
index 01a0f0e..2fda782 100644
--- a/src/disks/gduwindow.c
+++ b/src/disks/gduwindow.c
@@ -38,6 +38,7 @@
#include "gduchangepassphrasedialog.h"
#include "gdudisksettingsdialog.h"
#include "gdumdraiddisksdialog.h"
+#include "gducreateraidarraydialog.h"
/* Keep in sync with tabs in disks.ui file */
typedef enum
@@ -894,7 +895,7 @@ on_device_tree_menu_item_create_raid_array (GtkMenuItem *menu_item,
void
gdu_window_show_create_raid_array (GduWindow *window)
{
- g_print ("TODO: show create RAID array dialog\n");
+ gdu_create_raid_array_dialog_show (window);
}
/* ---------------------------------------------------------------------------------------------------- */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]