Changeset 23dfbe65f8e482280beffb5ea001f19bd33f4af5

Show
Ignore:
Timestamp:
11/09/09 10:27:41 (4 years ago)
Author:
Armin Burgmeier <armin@…>
git-author:
Gabríel A. Pétursson <gabrielp@simnet.is> / 2009-11-09T10:20:41Z+0100
Parents:
91395eca1c2b5080c28f69b5efc2381d5977e555
Children:
2edcdf470965d8e4ed377c45ea1a54fa61b97b7c
git-committer:
Armin Burgmeier <armin@arbur.net> / 2009-11-09T10:27:41Z+0100
Message:

Add detailed status bar error messages

2009-11-09 Gabríel A. Pétursson <gabrielp@…>

  • code/commands/browser-commands.cpp:
  • code/commands/file-tasks/task-open.cpp:
  • code/core/browser.cpp:
  • code/core/statusbar.cpp:
  • code/core/statusbar.hpp:
  • code/dialogs/find-dialog.cpp:
  • code/operations/operation-delete.cpp:
  • code/operations/operation-export-html.cpp:
  • code/operations/operation-new.cpp:
  • code/operations/operation-open-multiple.cpp:
  • code/operations/operation-open.cpp:
  • code/operations/operation-save.cpp: Minor refactoring. Added detailed status bar error messages.
Files:
14 modified

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r91395ec r23dfbe6  
     12009-11-09  Gabríel A. Pétursson  <gabrielp@simnet.is> 
     2 
     3        * code/commands/browser-commands.cpp: 
     4        * code/commands/file-tasks/task-open.cpp: 
     5        * code/core/browser.cpp: 
     6        * code/core/statusbar.cpp: 
     7        * code/core/statusbar.hpp: 
     8        * code/dialogs/find-dialog.cpp: 
     9        * code/operations/operation-delete.cpp: 
     10        * code/operations/operation-export-html.cpp: 
     11        * code/operations/operation-new.cpp: 
     12        * code/operations/operation-open-multiple.cpp: 
     13        * code/operations/operation-open.cpp: 
     14        * code/operations/operation-save.cpp: Minor refactoring. Added detailed 
     15        status bar error messages. 
     16 
    1172009-11-07  Armin Burgmeier  <armin@arbur.net> 
    218 
  • code/commands/browser-commands.cpp

    r141ee66 r23dfbe6  
    250250                        node.commands = this; 
    251251                        node.browser = browser; 
    252                         node.handle = m_status_bar.add_message( 
    253                                 StatusBar::INFO, 
     252                        node.handle = m_status_bar.add_info_message( 
    254253                                Glib::ustring::compose( 
    255254                                        _("Subscribing to %1..."), 
    256255                                        Glib::ustring( 
    257256                                                infc_browser_iter_get_name( 
    258                                                         browser, iter))), 0); 
     257                                                        browser, iter)))); 
    259258 
    260259                        g_signal_connect( 
     
    268267                else 
    269268                { 
    270                         m_status_bar.add_message( 
    271                                 StatusBar::INFO, 
    272                                 _("Subscription already in progress"), 2); 
     269                        m_status_bar.add_info_message( 
     270                                _("Subscription already in progress")); 
    273271                } 
    274272        } 
     
    375373        m_request_map.erase(iter); 
    376374 
    377         m_status_bar.add_message( 
    378                 StatusBar::ERROR, 
    379                 Glib::ustring::compose(_("Subscription failed: %1"), 
    380                         error->message), 5); 
     375        m_status_bar.add_error_message( 
     376                _("Subscription failed"), 
     377                error->message); 
    381378} 
    382379 
  • code/commands/file-tasks/task-open.cpp

    rf6cd41b r23dfbe6  
    4444                        G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); 
    4545 
    46                 m_handle = get_status_bar().add_message( 
    47                         StatusBar::INFO, Glib::ustring::compose( 
     46                m_handle = get_status_bar().add_info_message( 
     47                        Glib::ustring::compose( 
    4848                                _("Querying \"%1\"..."), 
    49                                 m_file->get_uri()), 0); 
     49                                m_file->get_uri())); 
    5050        } 
    5151        catch(const Gio::Error& ex) 
     
    101101void Gobby::TaskOpen::error(const Glib::ustring& message) 
    102102{ 
    103         get_status_bar().add_message(StatusBar::ERROR, 
     103        get_status_bar().add_error_message( 
    104104                Glib::ustring::compose( 
    105                         _("Failed to open document \"%1\": %2"), 
    106                         m_file->get_uri(), message), 5); 
     105                        _("Failed to open document \"%1\""), 
     106                        m_file->get_uri()), 
     107                message); 
    107108 
    108109        finish(); 
  • code/core/browser.cpp

    r4e250df r23dfbe6  
    274274                if(!inf_tcp_connection_open(connection, &error)) 
    275275                { 
    276                         m_status_bar.add_message(StatusBar::ERROR, 
    277                                                  error->message, 5); 
     276                        m_status_bar.add_error_message( 
     277                                Glib::ustring::compose( 
     278                                        _("Connection to \"%1\" failed"), 
     279                                        hostname), error->message); 
    278280                        g_error_free(error); 
    279281                } 
     
    313315 
    314316void Gobby::Browser::on_resolv_error(ResolvHandle* handle, 
    315                                      const std::runtime_error& error) 
     317                                     const std::runtime_error& error, 
     318                                     const Glib::ustring& hostname) 
    316319{ 
    317320        ResolvMap::iterator iter = m_resolv_map.find(handle); 
     
    321324        m_resolv_map.erase(iter); 
    322325 
    323         m_status_bar.add_message(StatusBar::ERROR, error.what(), 5); 
     326        m_status_bar.add_error_message( 
     327                Glib::ustring::compose(_("Could not resolve \"%1\""), 
     328                                       hostname), 
     329                error.what()); 
    324330} 
    325331 
     
    388394                if(device_index == 0) 
    389395                { 
    390                         m_status_bar.add_message( 
    391                                 StatusBar::ERROR, 
     396                        m_status_bar.add_error_message( 
     397                                Glib::ustring::compose( 
     398                                        _("Connection to \"%1\" failed"), 
     399                                        host), 
    392400                                Glib::ustring::compose( 
    393401                                        _("Device \"%1\" does not exist"), 
    394                                         device_name), 5); 
     402                                        device_name)); 
    395403                } 
    396404#endif 
     
    421429                        sigc::mem_fun(*this, &Browser::on_resolv_done), 
    422430                        host, device_index), 
    423                 sigc::mem_fun(*this, &Browser::on_resolv_error)); 
     431                sigc::bind( 
     432                        sigc::mem_fun(*this, &Browser::on_resolv_error), 
     433                        host)); 
    424434 
    425435        StatusBar::MessageHandle message_handle = 
    426                 m_status_bar.add_message( 
    427                         StatusBar::INFO, Glib::ustring::compose( 
    428                                 _("Resolving %1..."), host), 0); 
     436                m_status_bar.add_info_message( 
     437                        Glib::ustring::compose(_("Resolving \"%1\"..."), 
     438                                               host)); 
    429439 
    430440        m_resolv_map[resolv_handle].message_handle = message_handle; 
  • code/core/browser.hpp

    r4e250df r23dfbe6  
    112112                            unsigned int device_index); 
    113113        void on_resolv_error(ResolvHandle* handle, 
    114                              const std::runtime_error& error); 
     114                             const std::runtime_error& error, 
     115                             const Glib::ustring& hostname); 
    115116 
    116117        void on_security_policy_changed(); 
  • code/core/statusbar.cpp

    r6b79c69 r23dfbe6  
    5353 
    5454        Gtk::Widget* widget() const { return m_widget; } 
     55         
     56        Glib::ustring m_simple_desc; 
     57        Glib::ustring m_detail_desc; 
    5558protected: 
    5659        Gtk::Widget* m_widget; 
     
    8790Gobby::StatusBar::add_message(MessageType type, 
    8891                              const Glib::ustring& message, 
    89                               unsigned int timeout) 
    90 { 
     92                              const Glib::ustring& dialog_message) 
     93{ 
     94        if (m_list.size() >= 12) 
     95                Gobby::StatusBar::remove_message(m_list.begin()); 
     96 
    9197        Gtk::HBox* bar = Gtk::manage(new Gtk::HBox); 
    9298 
     
    106112                             "shadow-type", &shadow_type, NULL); 
    107113        Gtk::Frame* frame = Gtk::manage(new Gtk::Frame); 
     114        Gtk::EventBox *eventbox = Gtk::manage(new Gtk::EventBox); 
     115 
    108116        frame->set_shadow_type(static_cast<Gtk::ShadowType>(shadow_type)); 
    109         frame->add(*bar); 
     117        frame->add(*eventbox); 
     118        eventbox->add(*bar); 
    110119        bar->show(); 
    111120 
    112121        pack_start(*frame, Gtk::PACK_EXPAND_WIDGET); 
    113122        reorder_child(*frame, 0); 
    114         frame->show(); 
    115123 
    116124        m_list.push_back(new Message(frame)); 
    117         MessageHandle iter(m_list.end()); 
    118         --iter; 
    119  
    120         if(timeout) 
    121         { 
    122                 sigc::slot<bool> slot(sigc::bind_return( 
     125        Gobby::StatusBar::MessageHandle iter(--m_list.end()); 
     126        (*iter)->m_simple_desc = message; 
     127        (*iter)->m_detail_desc = dialog_message; 
     128 
     129        eventbox->signal_button_press_event().connect( 
     130                sigc::bind_return( 
    123131                        sigc::bind( 
    124132                                sigc::mem_fun( 
    125133                                        *this, 
    126                                         &StatusBar::remove_message), 
     134                                        &StatusBar::on_message_clicked), 
    127135                                iter), 
    128136                        false)); 
    129                  
    130                 sigc::connection timeout_conn = 
    131                         Glib::signal_timeout().connect_seconds(slot, timeout); 
    132  
    133                 (*iter)->set_timeout_connection(timeout_conn); 
    134         } 
     137 
     138        eventbox->show(); 
     139        frame->show(); 
    135140 
    136141        return iter; 
     142} 
     143 
     144Gobby::StatusBar::MessageHandle 
     145Gobby::StatusBar::add_info_message(const Glib::ustring& message) 
     146{ 
     147        return Gobby::StatusBar::add_message(INFO, message, ""); 
     148} 
     149 
     150Gobby::StatusBar::MessageHandle 
     151Gobby::StatusBar::add_error_message(const Glib::ustring& brief_desc, 
     152                                    const Glib::ustring& detailed_desc) 
     153{ 
     154        return Gobby::StatusBar::add_message(ERROR, brief_desc, detailed_desc); 
    137155} 
    138156 
     
    147165{ 
    148166        return m_list.end(); 
     167} 
     168 
     169void Gobby::StatusBar::on_message_clicked(GdkEventButton* button, 
     170                                          const MessageHandle& handler) 
     171{ 
     172        const Glib::ustring& simple = (*handler)->m_simple_desc; 
     173        const Glib::ustring& detail = (*handler)->m_detail_desc; 
     174 
     175        if(!detail.empty()) 
     176        { 
     177                if (button->button == 1) 
     178                { 
     179                        Gtk::MessageDialog *dialog = new Gtk::MessageDialog( 
     180                                simple, 
     181                                false, 
     182                                Gtk::MESSAGE_ERROR, 
     183                                Gtk::BUTTONS_CLOSE, 
     184                                false 
     185                        ); 
     186 
     187                        dialog->set_secondary_text(detail, false); 
     188                        dialog->run(); 
     189 
     190                        delete dialog; 
     191                } 
     192 
     193                remove_message(handler); 
     194        } 
    149195} 
    150196 
  • code/core/statusbar.hpp

    r6b79c69 r23dfbe6  
    2323 
    2424#include <gtkmm/box.h> 
     25#include <gtkmm/eventbox.h> 
     26#include <gtkmm/messagedialog.h> 
    2527#include <gtkmm/statusbar.h> 
    2628 
     
    5456        ~StatusBar(); 
    5557 
    56         MessageHandle add_message(MessageType type, 
    57                                   const Glib::ustring& message, 
    58                                   unsigned int timeout); // timeout in seconds 
     58        MessageHandle add_info_message(const Glib::ustring& message); 
     59 
     60        MessageHandle add_error_message(const Glib::ustring& brief_desc, 
     61                                        const Glib::ustring& detailed_desc); 
    5962 
    6063        void remove_message(const MessageHandle& handle); 
     
    6366 
    6467protected: 
     68        MessageHandle add_message(MessageType type, 
     69                                  const Glib::ustring& message, 
     70                                  const Glib::ustring& dialog_message); 
     71 
    6572        static void on_mark_set_static(GtkTextBuffer* buffer, 
    6673                                       GtkTextIter* location, 
     
    7683                static_cast<StatusBar*>(user_data)->on_changed(); 
    7784        } 
     85 
     86        void on_message_clicked(GdkEventButton* button, 
     87                                const MessageHandle& message); 
    7888 
    7989        void on_document_removed(DocWindow& document); 
  • code/dialogs/find-dialog.cpp

    rd9e7c10 r23dfbe6  
    164164                        get_find_text()); 
    165165 
    166                 m_status_bar.add_message(StatusBar::INFO, str, 5); 
     166                m_status_bar.add_info_message(str); 
    167167                return false; 
    168168        } 
     
    180180                        get_find_text()); 
    181181 
    182                 m_status_bar.add_message(StatusBar::INFO, str, 5); 
     182                m_status_bar.add_info_message(str); 
    183183                return false; 
    184184        } 
     
    342342        } 
    343343 
    344         m_status_bar.add_message(StatusBar::INFO, message, 5); 
     344        m_status_bar.add_info_message(message); 
    345345        return result; 
    346346} 
  • code/operations/operation-delete.cpp

    rfd2f104 r23dfbe6  
    3939                G_CALLBACK(on_request_finished_static), this); 
    4040 
    41         m_message_handle = get_status_bar().add_message( 
    42                 StatusBar::INFO, 
    43                 Glib::ustring::compose(_("Removing node %1..."), m_name), 0); 
     41        m_message_handle = get_status_bar().add_info_message( 
     42                Glib::ustring::compose(_("Removing node %1..."), m_name)); 
    4443} 
    4544 
     
    5554void Gobby::OperationDelete::on_request_failed(const GError* error) 
    5655{ 
    57         get_status_bar().add_message( 
    58                 StatusBar::ERROR, 
    59                 Glib::ustring::compose(_("Failed to delete node %1: %2"), 
    60                         m_name, error->message), 5); 
     56        get_status_bar().add_error_message( 
     57                Glib::ustring::compose(_("Failed to delete node %1"), m_name), 
     58                error->message); 
    6159 
    6260        fail(); 
  • code/operations/operation-export-html.cpp

    r1f344e6 r23dfbe6  
    450450                sigc::mem_fun(*this, &OperationExportHtml::on_file_replace)); 
    451451 
    452         m_message_handle = get_status_bar().add_message( 
    453                 StatusBar::INFO, 
     452        m_message_handle = get_status_bar().add_info_message( 
    454453                Glib::ustring::compose( 
    455454                        _("Exporting document %1 to %2 in HTML..."), 
    456                         document.get_title(), uri), 0); 
     455                        document.get_title(), uri)); 
    457456} 
    458457 
     
    523522void Gobby::OperationExportHtml::error(const Glib::ustring& message) 
    524523{ 
    525         get_status_bar().add_message( 
    526                 StatusBar::ERROR, 
     524        get_status_bar().add_error_message( 
    527525                Glib::ustring::compose( 
    528                         _("Failed to export document %1 to HTML: %2"), 
    529                         m_file->get_uri(), message), 5); 
     526                        _("Failed to export document %1 to HTML"), m_file->get_uri()), 
     527                message); 
    530528 
    531529        fail(); 
  • code/operations/operation-new.cpp

    rfd2f104 r23dfbe6  
    5252                G_CALLBACK(on_request_finished_static), this); 
    5353 
    54         m_message_handle = get_status_bar().add_message( 
    55                 StatusBar::INFO, 
     54        m_message_handle = get_status_bar().add_info_message( 
    5655                Glib::ustring::compose( 
    5756                        directory ? _("Creating directory %1...") 
    58                                   : _("Creating document %1..."), name), 0); 
     57                                  : _("Creating document %1..."), name)); 
    5958} 
    6059 
     
    7069void Gobby::OperationNew::on_request_failed(const GError* error) 
    7170{ 
    72         get_status_bar().add_message( 
    73                 StatusBar::ERROR, 
     71        get_status_bar().add_error_message( 
    7472                Glib::ustring::compose( 
    75                         m_directory ? _("Failed to create directory %1: %2") 
    76                                     : _("Failed to create document %1: %2"), 
    77                         m_name, error->message), 5); 
     73                        m_directory ? _("Failed to create directory %1") 
     74                                    : _("Failed to create document %1"), 
     75                        m_name), 
     76                error->message); 
    7877 
    7978        fail(); 
  • code/operations/operation-open-multiple.cpp

    rfd2f104 r23dfbe6  
    155155                const Glib::ustring& message) 
    156156{ 
    157         get_status_bar().add_message(StatusBar::ERROR, 
     157        get_status_bar().add_error_message( 
    158158                Glib::ustring::compose( 
    159                         _("Failed to open document \"%1\": %2"), 
    160                         iter->uri, message), 5); 
     159                        _("Failed to open document \"%1\""), iter->uri), 
     160                message); 
    161161 
    162162        m_infos.erase(iter); 
     
    169169void Gobby::OperationOpenMultiple::fatal_error(const Glib::ustring& message) 
    170170{ 
    171         get_status_bar().add_message(StatusBar::ERROR, 
    172                 Glib::ustring::compose( 
    173                         _("Failed to open multiple documents: %1"), 
    174                         message), 5); 
     171        get_status_bar().add_error_message( 
     172                _("Failed to open multiple documents"), 
     173                message); 
    175174 
    176175        fail(); 
  • code/operations/operation-open.cpp

    r9b7fc95 r23dfbe6  
    8585                        *this, &OperationOpen::on_file_read)); 
    8686 
    87                 m_message_handle = get_status_bar().add_message( 
    88                         StatusBar::INFO, 
     87                m_message_handle = get_status_bar().add_info_message( 
    8988                        Glib::ustring::compose( 
    90                                 _("Opening document %1..."), uri), 0); 
     89                                _("Opening document %1..."), uri)); 
    9190 
    9291                m_parent.signal_node_removed().connect( 
     
    434433void Gobby::OperationOpen::error(const Glib::ustring& message) 
    435434{ 
    436         get_status_bar().add_message( 
    437                 StatusBar::ERROR, 
     435        get_status_bar().add_error_message( 
    438436                Glib::ustring::compose( 
    439                         _("Failed to open document \"%1\": %2"), 
    440                         m_file->get_uri(), message), 5); 
     437                        _("Failed to open document \"%1\""), 
     438                        m_file->get_uri()), 
     439                message); 
    441440 
    442441        fail(); 
  • code/operations/operation-save.cpp

    r6afa444 r23dfbe6  
    7070                                           &OperationSave::on_file_replace)); 
    7171 
    72         m_message_handle = get_status_bar().add_message( 
    73                 StatusBar::INFO, 
     72        m_message_handle = get_status_bar().add_info_message( 
    7473                Glib::ustring::compose(_("Saving document %1 to %2..."), 
    75                         document.get_title(), uri), 0); 
     74                        document.get_title(), uri)); 
    7675 
    7776        folder.signal_document_removed().connect( 
     
    286285void Gobby::OperationSave::error(const Glib::ustring& message) 
    287286{ 
    288         get_status_bar().add_message( 
    289                 StatusBar::ERROR, 
    290                 Glib::ustring::compose(_("Failed to save document %1: %2"), 
    291                                          m_file->get_uri(), message), 5); 
     287        get_status_bar().add_error_message( 
     288                Glib::ustring::compose(_("Failed to save document %1"), 
     289                                         m_file->get_uri()), 
     290                message); 
    292291 
    293292        fail();