Importing 0.8.4-pre-2009-03-21.

This commit is contained in:
Alexander Shaduri
2010-12-26 19:44:01 +00:00
parent 2ffec89ed8
commit 880d876ccf
19 changed files with 290 additions and 158 deletions
+2 -2
View File
@@ -68,7 +68,7 @@ src-rpm: dist
# NSIS installer support.
# Requires wine, installed NSIS, gtkmm dlls, pcre dlls, smartctl.exe, smartctl_console.exe.
# Requires wine, installed NSIS, gtkmm dlls, pcre dlls, smartctl-nc.exe, smartctl.exe.
# dos2unix on build machine.
# Execute only with win32 build present.
@@ -103,8 +103,8 @@ win-dist-prepare: all win-dist-clean
cp "@WINDOWS_DLLS_LOCATION@"/libsigc-*.dll nsis-dist/
cp "@WINDOWS_DLLS_LOCATION@"/pcre3.dll nsis-dist/
cp "@WINDOWS_DLLS_LOCATION@"/mingwm10.dll nsis-dist/
cp "@WINDOWS_DLLS_LOCATION@"/smartctl-nc.exe nsis-dist/
cp "@WINDOWS_DLLS_LOCATION@"/smartctl.exe nsis-dist/
cp "@WINDOWS_DLLS_LOCATION@"/smartctl_console.exe nsis-dist/
cp src/gsmartcontrol.exe nsis-dist/
+4
View File
@@ -1,4 +1,8 @@
Version 0.8.4, released on ---------
Blacklist Linux Software RAID devices (backported from Debian).
Win32: Use smartmontools-supplied smartctl-nc.exe by default (if found).
Version 0.8.3, released on 2008-12-27
A random "Smartctl returned an empty output" error on Windows was fixed.
Thanks to Zurab Khetsuriani for testing.
+5 -5
View File
@@ -109,7 +109,7 @@ Most of these packages are probably already provided by your distribution.
Here are the packages you need to have to build GSmartControl on some Linux
distributions:
OpenSUSE, SLES, SLED:
openSUSE, SLES, SLED:
gcc-c++, pcre-devel, gtkmm2-devel, (possibly) libglademm-devel.
Fedora, CentOS, RHEL:
@@ -171,9 +171,9 @@ Long answer: read below.
First, check if you can find a pre-built package for your distribution or
operating system - they usually provide the best integration and the easiest
installation procedure. For Linux, one option is to try the OpenSUSE Build
installation procedure. For Linux, one option is to try the openSUSE Build
Service - it provides ready-to-install packages for various popular Linux
distributions (OpenSUSE, Fedora, etc...). See
distributions (openSUSE, Fedora, etc...). See
http://download.opensuse.org/repositories/home:/alex_sh/ .
If you want to compile from source, check that you have all the required
@@ -335,10 +335,10 @@ If you still think it's a GSmartControl issue, please collect the following
information about your system. Without it, it may be very hard or impossible
to fix the bug.
* Which operating system you use (for example, OpenSUSE Linux 11.0).
* Which operating system you use (for example, openSUSE Linux 11.0).
* Which version of GTK and Gtkmm you have installed. Finding this out is very
distribution-specific. For example, on OpenSUSE it would be
distribution-specific. For example, on openSUSE it would be
"rpm -q gtk2 gtkmm2". Some distributions have gtkmm24 instead. You may also
search them in your distribution's graphical package manager, if there is one.
+4
View File
@@ -48,7 +48,11 @@ libdebug:
bug: if -q is passed, Execution log doesn't contain libdebug log. (requires per-channel status control).
Move attributes as a second tab
INCLUDE SMARTMONTOOLS LICENSE!!
Update copyright years.
----------- Feature List ----------
+1 -1
View File
@@ -1,5 +1,5 @@
AC_INIT([GSmartControl], 0.8.3, [], [gsmartcontrol])
AC_INIT([GSmartControl], 0.8.4, [], [gsmartcontrol])
AC_CONFIG_SRCDIR([configure.ac])
AC_CONFIG_HEADERS([config.h])
+2 -2
View File
@@ -23,6 +23,6 @@ binary was compiled for 32-bit Windows, and should work on both 32-bit and
* PCRE (http://www.pcre.org/) dll.
* Smartctl binaries - smartctl.exe (compiled without console output),
smartctl_console.exe (compiled with console output), version 5.38.
* Smartctl binaries - smartctl-nc.exe (compiled without console output),
smartctl.exe (compiled with console output), version 5.38.
http://smartmontools.sf.net/ .
+3 -3
View File
@@ -177,7 +177,7 @@ FunctionEnd
; ----------------- INSTALLATINO TYPES
; ----------------- INSTALLATION TYPES
; InstType "Recommended"
InstType "Full"
@@ -200,8 +200,8 @@ SectionIn 1
File gsmartcontrol.ico
File icon_*.png
File *.dll
File smartctl-nc.exe
File smartctl.exe
File smartctl_console.exe
File /r doc
@@ -272,8 +272,8 @@ Section Uninstall
Delete "$INSTDIR\gsmartcontrol.ico"
Delete "$INSTDIR\icon_*.png"
Delete "$INSTDIR\*.dll"
Delete "$INSTDIR\smartctl-nc.exe"
Delete "$INSTDIR\smartctl.exe"
Delete "$INSTDIR\smartctl_console.exe"
RMDir /r "$INSTDIR\doc"
+3 -2
View File
@@ -2,8 +2,9 @@ AM_CPPFLAGS = $(all_includes)
METASOURCES = AUTO
noinst_LIBRARIES = libapplib.a
libapplib_a_SOURCES = app_gtkmm_utils.cpp app_pango_utils.cpp cmdex.cpp \
cmdex_sync.cpp cmdex_sync_gui.cpp gui_utils.cpp selftest.cpp smartctl_parser.cpp \
storage_detector.cpp storage_device.cpp storage_property.cpp storage_property_descr.cpp
cmdex_sync.cpp cmdex_sync_gui.cpp gui_utils.cpp selftest.cpp smartctl_executor.cpp \
smartctl_parser.cpp storage_detector.cpp storage_device.cpp storage_property.cpp \
storage_property_descr.cpp
noinst_HEADERS = app_gtkmm_features.h app_gtkmm_utils.h app_pango_utils.h \
app_pcrecpp.h app_ui_res_utils.h cmdex.h cmdex_sync.h cmdex_sync_gui.h gui_utils.h \
selftest.h smartctl_executor.h smartctl_executor_gui.h smartctl_parser.h \
@@ -0,0 +1,64 @@
/**************************************************************************
Copyright:
(C) 2008 Alexander Shaduri <ashaduri 'at' gmail.com>
License: See LICENSE_gsmartcontrol.txt
***************************************************************************/
#include "smartctl_executor.h"
#include "hz/fs_path.h"
#include "hz/win32_tools.h"
#include "rconfig/rconfig_mini.h"
// returns an empty string if not found.
std::string get_smartctl_binary()
{
std::string smartctl_binary;
rconfig::get_data("system/smartctl_binary", smartctl_binary);
#ifdef _WIN32
// look in smartmontools installation directory.
do {
bool use_smt = false;
rconfig::get_data("system/win32_search_smartctl_in_smartmontools", use_smt);
if (!use_smt)
break;
std::string smt_regpath, smt_regkey, smt_smartctl;
rconfig::get_data("system/win32_smartmontools_regpath", smt_regpath);
rconfig::get_data("system/win32_smartmontools_regkey", smt_regkey);
rconfig::get_data("system/win32_smartmontools_smartctl_binary", smt_smartctl);
if (smt_regpath.empty() || smt_regkey.empty() || smt_smartctl.empty())
break;
std::string smt_inst_dir;
hz::win32_get_registry_value_string(smt_inst_dir, HKEY_LOCAL_MACHINE, smt_regpath, smt_regkey);
if (smt_inst_dir.empty()) {
debug_out_info("app", DBG_FUNC_MSG << "Smartmontools installation not found in \"HKLM\\"
<< smt_regpath << "\\" << smt_regkey << "\".\n");
break;
}
debug_out_info("app", DBG_FUNC_MSG << "Smartmontools installation found at \"" << smt_inst_dir
<< "\", using \"" << smt_smartctl << "\".\n");
hz::FsPath p(smt_inst_dir);
p.append(smt_smartctl);
if (!p.exists() || !p.is_file())
break;
smartctl_binary = p.str();
} while (false);
#endif
return smartctl_binary;
}
@@ -152,6 +152,9 @@ typedef SmartctlExecutorGeneric<CmdexSync> SmartctlExecutor;
// returns an empty string if not found.
std::string get_smartctl_binary();
@@ -7,7 +7,6 @@
#include "hz/hz_config.h" // CONFIG_*
#include <ios> // std::boolalpha
// #include <glibmm/fileutils.h> // Dir
#include <algorithm> // std::find
#include <cstdio> // std::fgets()
#include <cerrno> // ENXIO
@@ -201,9 +200,9 @@ namespace {
}
hz::File file(parts_file);
// std::string contents;
// std::string contents;
std::vector<std::string> lines;
// if (!f.get_contents(contents)) {
// if (!f.get_contents(contents)) {
if (!read_proc_partitions_file(file, lines)) { // this outputs to debug too
std::string error_msg = file.get_error_utf8(); // save before calling other file functions
if (!file.exists()) {
@@ -214,9 +213,9 @@ namespace {
return error_msg;
}
// debug_out_dump("app", DBG_FUNC_MSG << "Dumping partitions file:\n" << contents << "\n");
// debug_out_dump("app", DBG_FUNC_MSG << "Dumping partitions file:\n" << contents << "\n");
// hz::string_split(contents, '\n', lines, true);
// hz::string_split(contents, '\n', lines, true);
std::vector<std::string> blacklist;
// fixme: not sure about how partitions are visible with twa0.
@@ -225,6 +224,7 @@ namespace {
blacklist.push_back("/loop[0-9]*$/"); // not sure if loop devices go there, but anyway...
blacklist.push_back("/part[0-9]+$/"); // devfs had them
blacklist.push_back("/p[0-9]+$/"); // partitions are usually marked this way
blacklist.push_back("/md[0-9]*$/"); // linux software raid
for (unsigned int i = 0; i < lines.size(); ++i) {
@@ -249,7 +249,7 @@ namespace {
if (blacked)
continue;
std::string path = "/dev/" + dev;
std::string path = "/dev/" + dev; // let's just hope the it's /dev.
if (std::find(devices.begin(), devices.end(), path) == devices.end()) // there may be duplicates
devices.push_back(path);
}
@@ -263,7 +263,7 @@ namespace {
// smartctl accepts various variants, the most straight being pdN,
// (or /dev/pdN, /dev being optional) where N comes from
// (or /dev/pdN, /dev/ being optional) where N comes from
// "\\.\PhysicalDriveN" (winnt only).
inline std::string detect_drives_win32(std::vector<std::string>& devices)
+5 -4
View File
@@ -16,6 +16,7 @@
#include "storage_device.h"
#include "smartctl_parser.h"
#include "storage_settings.h"
#include "smartctl_executor.h"
@@ -438,16 +439,16 @@ std::string StorageDevice::execute_smartctl(const std::string& command_options,
if (!smartctl_ex) // if it doesn't exist, create a default one
smartctl_ex = new SmartctlExecutor(); // will be auto-deleted
std::string smartctl_binary, smartctl_def_options;
rconfig::get_data("system/smartctl_binary", smartctl_binary);
rconfig::get_data("system/smartctl_options", smartctl_def_options);
std::string smartctl_binary = get_smartctl_binary();
if (smartctl_binary.empty()) {
debug_out_error("app", DBG_FUNC_MSG << "Smartctl binary is not set in config.\n");
return "Smartctl binary is not specified in configuration.";
}
std::string smartctl_def_options;
rconfig::get_data("system/smartctl_options", smartctl_def_options);
if (!smartctl_def_options.empty())
smartctl_def_options += " ";
+3 -2
View File
@@ -15,6 +15,7 @@
#include "applib/storage_detector.h"
#include "applib/smartctl_parser.h"
#include "applib/gui_utils.h" // gui_show_error_dialog
#include "applib/smartctl_executor.h" // get_smartctl_binary()
#include "applib/smartctl_executor_gui.h"
#include "applib/app_gtkmm_utils.h" // app_gtkmm_*
#include "applib/storage_property_colors.h" // app_property_get_label_hilight_color
@@ -61,11 +62,11 @@ GscMainWindow::GscMainWindow(BaseObjectType* gtkcobj, const app_ui_res_ref_t& re
bool show_output_button = true;
do {
std::string smartctl_binary, smartctl_def_options;
rconfig::get_data("system/smartctl_binary", smartctl_binary);
std::string smartctl_binary = get_smartctl_binary();
// Don't use default options here - they are used when invoked
// with a device option.
// std::string smartctl_def_options;
// rconfig::get_data("system/smartctl_options", smartctl_def_options);
if (smartctl_binary.empty()) {
@@ -229,6 +229,13 @@ GscPreferencesWindow::GscPreferencesWindow(BaseObjectType* gtkcobj, const app_ui
// we can't do this in treeview's constructor, it doesn't know about this window yet.
this->device_widget_set_remove_possible(false); // initial state
// hide win32-only options for non-win32.
#ifndef _WIN32
Gtk::CheckButton* smartctl_search_check = this->lookup_widget<Gtk::CheckButton*>("search_in_smartmontools_first_check");
if (smartctl_search_check)
smartctl_search_check->hide();
#endif
// ---------------
@@ -318,6 +325,11 @@ void GscPreferencesWindow::import_config()
&& (check = this->lookup_widget<Gtk::CheckButton*>("show_smart_capable_only_check")) )
check->set_active(show_smart_capable_only);
bool win32_search_smartctl_in_smartmontools;
if ( prefs_config_get("system/win32_search_smartctl_in_smartmontools", win32_search_smartctl_in_smartmontools)
&& (check = this->lookup_widget<Gtk::CheckButton*>("search_in_smartmontools_first_check")) )
check->set_active(win32_search_smartctl_in_smartmontools);
std::string smartctl_binary;
if ( prefs_config_get("system/smartctl_binary", smartctl_binary)
&& (entry = this->lookup_widget<Gtk::Entry*>("smartctl_binary_entry")) )
@@ -363,6 +375,9 @@ void GscPreferencesWindow::export_config()
if ((check = this->lookup_widget<Gtk::CheckButton*>("show_smart_capable_only_check")))
prefs_config_set("gui/show_smart_capable_only", bool(check->get_active()));
if ((check = this->lookup_widget<Gtk::CheckButton*>("search_in_smartmontools_first_check")))
prefs_config_set("system/win32_search_smartctl_in_smartmontools", bool(check->get_active()));
if ((entry = this->lookup_widget<Gtk::Entry*>("smartctl_binary_entry")))
prefs_config_set("system/smartctl_binary", std::string(entry->get_text()));
+11
View File
@@ -30,7 +30,18 @@ inline void init_default_settings()
rconfig::set_default_data("system/config_autosave_timeout", uint32_t(3*60)); // 3 minutes. 0 to disable.
rconfig::set_default_data("system/first_boot", true); // used to show the first-start warning.
#ifndef _WIN32
rconfig::set_default_data("system/smartctl_binary", "smartctl"); // must be in PATH or use absolute path.
#else
rconfig::set_default_data("system/smartctl_binary", "smartctl-nc.exe"); // use no-console version by default.
#endif
// search for "smartctl-nc.exe" in smartmontools installation first.
rconfig::set_default_data("system/win32_search_smartctl_in_smartmontools", true);
rconfig::set_default_data("system/win32_smartmontools_regpath", "SOFTWARE\\smartmontools"); // in HKLM
rconfig::set_default_data("system/win32_smartmontools_regkey", "Install_Dir");
rconfig::set_default_data("system/win32_smartmontools_smartctl_binary", "bin\\smartctl-nc.exe"); // relative to smt install path
rconfig::set_default_data("system/smartctl_options", ""); // default options on ALL commands
rconfig::set_default_data("system/smartctl_device_options", ""); // dev1:val1;dev2:val2;... format, each bin2ascii-encoded.
+1 -1
View File
@@ -15,7 +15,7 @@ BEGIN
VALUE "FileDescription", "GSmartControl - Hard disk drive health inspection tool"
VALUE "FileVersion", "@VERSION@"
VALUE "InternalName", "gsmartcontrol.exe"
VALUE "LegalCopyright", "Copyright (C) 2008 Alexander Shaduri"
VALUE "LegalCopyright", "Copyright (C) 2008 - 2009 Alexander Shaduri"
VALUE "OriginalFilename", "gsmartcontrol.exe"
VALUE "ProductName", "GSmartControl"
VALUE "ProductVersion", "@VERSION@"
+1
View File
@@ -543,6 +543,7 @@ inline bool File::move(const std::string& to)
// win32 rename() doesn't replace contents if newpath exists and says "file exists".
#ifdef _WIN32
/// FIXME: Try to rename first, unlink/rename again later. This way we have at least some atomicity.
// try remove it if it's a file. no error checks here - rename() will report the needed messages.
File dest_file(to);
if (dest_file.is_file())
+7 -1
View File
@@ -167,7 +167,13 @@ class ptr_container : public Container {
// for std::list: remove() and remove_if()
void remove(const value_type& v)
{
clean( std::find(begin(), end(), v) );
for (iterator i = begin(); i != end(); ++i) {
if ((*i) == v) {
clean(i);
break;
}
}
// clean( std::find(begin(), end(), v) );
Container::remove(v);
}
+149 -128
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Mon Nov 10 21:09:06 2008 -->
<!--Generated with glade3 3.4.5 on Sun Mar 22 00:42:11 2009 -->
<glade-interface>
<widget class="GtkWindow" id="gsc_preferences_window">
<child>
@@ -102,95 +102,116 @@
<widget class="GtkVBox" id="vbox7">
<property name="visible">True</property>
<child>
<widget class="GtkTable" id="table1">
<widget class="GtkVBox" id="vbox12">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="row_spacing">7</property>
<property name="spacing">7</property>
<child>
<widget class="GtkAlignment" id="alignment5">
<widget class="GtkCheckButton" id="search_in_smartmontools_first_check">
<property name="visible">True</property>
<property name="left_padding">5</property>
<property name="can_focus">True</property>
<property name="tooltip_text">Show SMART-capable drives only</property>
<property name="tooltip" translatable="yes">Show SMART-capable drives only</property>
<property name="label" translatable="yes">Loo_k for smartctl in smartmontools installation directory first</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
</widget>
</child>
<child>
<widget class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="row_spacing">7</property>
<child>
<widget class="GtkButton" id="smartctl_binary_browse_button">
<widget class="GtkAlignment" id="alignment5">
<property name="visible">True</property>
<property name="left_padding">5</property>
<child>
<widget class="GtkButton" id="smartctl_binary_browse_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="label" translatable="yes">_Browse...</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label13">
<property name="visible">True</property>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="smartctl_options_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="label" translatable="yes">_Browse...</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<property name="tooltip_text">Global parameters for smartctl. These parameters will be used every time the progam invokes smartctl. Must be shell-escaped.</property>
<property name="tooltip" translatable="yes">Global parameters for smartctl. These parameters will be used every time the progam invokes smartctl. Must be shell-escaped.</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="tooltip_text">Global parameters for smartctl. These parameters will be used every time the progam invokes smartctl.</property>
<property name="tooltip" translatable="yes">Global parameters for smartctl. These parameters will be used every time the progam invokes smartctl.</property>
<property name="label" translatable="yes">Smartctl _parameters: </property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="tooltip_text">A path to smartctl binary. If the path is not absolute, the binary will be looked for in user's $PATH.</property>
<property name="tooltip" translatable="yes">A path to smartctl binary. If the path is not absolute, the binary will be looked for in user's $PATH.</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">S_martctl binary: </property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="smartctl_binary_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text">A path to smartctl binary. If the path is not absolute, the binary will be looked for in user's PATH.</property>
<property name="tooltip" translatable="yes">A path to smartctl binary. If the path is not absolute, the binary will be looked for in user's PATH.</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label13">
<property name="visible">True</property>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="smartctl_options_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text">Global parameters for smartctl. These parameters will be used every time the progam invokes smartctl. Must be shell-escaped.</property>
<property name="tooltip" translatable="yes">Global parameters for smartctl. These parameters will be used every time the progam invokes smartctl. Must be shell-escaped.</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="tooltip_text">Global parameters for smartctl. These parameters will be used every time the progam invokes smartctl.</property>
<property name="tooltip" translatable="yes">Global parameters for smartctl. These parameters will be used every time the progam invokes smartctl.</property>
<property name="label" translatable="yes">Smartctl _parameters: </property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="tooltip_text">A path to smartctl binary. If the path is not absolute, the binary will be looked for in user's $PATH.</property>
<property name="tooltip" translatable="yes">A path to smartctl binary. If the path is not absolute, the binary will be looked for in user's $PATH.</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">S_martctl binary: </property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="smartctl_binary_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text">A path to smartctl binary. If the path is not absolute, the binary will be looked for in user's PATH.</property>
<property name="tooltip" translatable="yes">A path to smartctl binary. If the path is not absolute, the binary will be looked for in user's PATH.</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="position">1</property>
</packing>
</child>
</widget>
@@ -255,18 +276,6 @@
<property name="n_rows">1</property>
<property name="n_columns">2</property>
<property name="row_spacing">7</property>
<child>
<widget class="GtkEntry" id="device_blacklist_patterns_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text">Semicolon-separated blacklist PCRE patterns for device search. For example, to blacklist all "/dev/sd*" devices, use "sd.$". Simply listing them as "sda;sdb" or "sd[ab]" will also work.</property>
<property name="tooltip" translatable="yes">Semicolon-separated blacklist PCRE patterns for device search. For example, to blacklist all "/dev/sd*" devices, use "sd.$". Simply listing them as "sda;sdb" or "sd[ab]" will also work.</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label6">
<property name="visible">True</property>
@@ -280,6 +289,18 @@
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="device_blacklist_patterns_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text">Semicolon-separated blacklist PCRE patterns for device search. For example, to blacklist all "/dev/sd*" devices, use "sd.$". Simply listing them as "sda;sdb" or "sd[ab]" will also work.</property>
<property name="tooltip" translatable="yes">Semicolon-separated blacklist PCRE patterns for device search. For example, to blacklist all "/dev/sd*" devices, use "sd.$". Simply listing them as "sda;sdb" or "sd[ab]" will also work.</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">10</property>
@@ -392,40 +413,15 @@
<property name="n_columns">2</property>
<property name="row_spacing">10</property>
<child>
<widget class="GtkLabel" id="label9">
<widget class="GtkEntry" id="device_options_parameter_entry">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Drive Properties:&lt;/b&gt;</property>
<property name="use_markup">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text">Smartctl parameters for this device. For example, to use older smartctl versions with libata devices, use "-d ata". Must be shell-escaped.</property>
<property name="tooltip" translatable="yes">Smartctl parameters for this device. For example, to use older smartctl versions with libata devices, use "-d ata". Must be shell-escaped.</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label12">
<property name="visible">True</property>
<property name="tooltip_text">Device name (for example, "/dev/sda")</property>
<property name="tooltip" translatable="yes">Device name (for example, "/dev/sda")</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">De_vice: </property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="device_options_parameters_entry">
<property name="visible">True</property>
<property name="tooltip_text">Smartctl parameters for this device. For example, to use older smartctl versions with libata devices, use "-d ata".</property>
<property name="tooltip" translatable="yes">Smartctl parameters for this device. For example, to use older smartctl versions with libata devices, use "-d ata".</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">_Parameters: </property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
@@ -445,19 +441,44 @@
</packing>
</child>
<child>
<widget class="GtkEntry" id="device_options_parameter_entry">
<widget class="GtkLabel" id="device_options_parameters_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text">Smartctl parameters for this device. For example, to use older smartctl versions with libata devices, use "-d ata". Must be shell-escaped.</property>
<property name="tooltip" translatable="yes">Smartctl parameters for this device. For example, to use older smartctl versions with libata devices, use "-d ata". Must be shell-escaped.</property>
<property name="tooltip_text">Smartctl parameters for this device. For example, to use older smartctl versions with libata devices, use "-d ata".</property>
<property name="tooltip" translatable="yes">Smartctl parameters for this device. For example, to use older smartctl versions with libata devices, use "-d ata".</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">_Parameters: </property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label12">
<property name="visible">True</property>
<property name="tooltip_text">Device name (for example, "/dev/sda")</property>
<property name="tooltip" translatable="yes">Device name (for example, "/dev/sda")</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">De_vice: </property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;b&gt;Drive Properties:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="right_attach">2</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>