view libgui/src/symbol-information.cc @ 16431:5982d469f79b

use signal for setting, appending to, and clearing history widget * history-dockwidget.h, history-dockwidget.cc (history_dock_widget::request_history_model_update, history_dock_widget::reset_model, history_dock_widget::update_history_callback): Delete. (history_dock_widget::set_history, history_dock_widget::append_history, history_dock_widget::clear_history): New functions. * main-window.h, main-window.cc (main_window::update_history): Delete. (main_window::construct): Delete connection from _octave_qt_event_listener::update_history_signal to main_window::update_history. Connect _octave_qt_link::set_history_signal to _history_dock_widget::set_history. Connect _octave_qt_link::append_history_signal to _history_dock_widget::append_history. Connect _octave_qt_link::clear_history_signal to _history_dock_widget::clear_history. (main_window::clear_history_callback): Call Fhistory instead of command_history::clear and _history_dock_widget->reset_model. * octave-main-thread.cc (octave_main_thread::run): Don't call octave_link::update_history. * octave-qt-event-listener.h, octave-qt-event-listener.cc (octave_qt_event_listener::update_history): Delete. (octave_qt_event_listener::update_history_signal): Delete. * octave-qt-link.h, octave-qt-link.cc (octave_qt_link::do_update_history): Delete. (octave_qt_link::do_set_history,octave_qt_link::do_append_history, octave_qt_link::do_clear_history): New functions. (octave_qt_link::do_post_input_event): Don't call do_update_history. (set_history_signal, append_history_signal, clear_history_signal): New signals. * octave-event-listener.h (octave_event_listener::update_history): Delete. * input.cc (octave_base_reader::octave_gets): Call command_history::add. * oct-hist.cc (do_history): New option, -c. Call octave_link history functions as needed. (initialize_history): Call octave_link::set_history. (octave_history_write_timestamp): Call octave_link::append_history. (Fedit_history): Document -c. * octave-link.h (octave_link::update_history, octave_link::do_update_history): Delete. (octave_link::set_history, octave_link::append_history, octave_link::clear_history, octave_link::do_set_history, octave_link::do_append_history, octave_link::do_clear_history, octave_link::do_pre_input_event, octave_link::do_post_input_event): New functions.
author John W. Eaton <jwe@octave.org>
date Thu, 04 Apr 2013 13:20:43 -0400
parents e77cd781eeef
children
line wrap: on
line source

/*

Copyright (C) 2011-2012 Jacob Dawid

This file is part of Octave.

Octave is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3 of the License, or (at your
option) any later version.

Octave is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with Octave; see the file COPYING.  If not, see
<http://www.gnu.org/licenses/>.

*/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <QString>

#include "ov.h"
#include "symtab.h"

#include "symbol-information.h"

symbol_information::symbol_information (const symbol_table::symbol_record& sr)
{
  if (sr.is_local () && !sr.is_global () && !sr.is_hidden ())
    _scope = local;
  else if (sr.is_global ())
    _scope = global;
  else if (sr.is_persistent ())
    _scope = persistent;
  else
    _scope = unknown;

  _symbol = QString (sr.name ().c_str ());
  _class_name = QString (sr.varval ().class_name ().c_str ());
  octave_value ov = sr.varval ();
  dim_vector dv = ov.dims ();

  // In case we have really large matrices or strings, cut them down
  // for performance reasons.
  QString short_value_string;
  bool use_short_value_string = false;

  if (ov.is_range ())
    {
      use_short_value_string = true;

      Range r = ov.range_value ();

      double base = r.base ();
      double increment = r.inc ();
      double limit = r.limit ();

      std::stringstream buffer;

      buffer << base << ":";
      if (increment != 1 )
        buffer << increment << ":";
      buffer << limit;

      short_value_string = QString::fromStdString (buffer.str ());
    }
  else if (ov.is_matrix_type () || ov.is_cell ())
    {
      if (ov.is_string ())  // a string?
        {
          if (ov.string_value ().length () > 30)
            {
              use_short_value_string = true;
              short_value_string = QString ("\"")
                  + QString::fromStdString (ov.string_value ().substr (0, 30))
                  + QString (" ... \"");
            }
        }
      else  // arrays and cell arrays
        {
          if (ov.numel () > 10)
            {
              use_short_value_string = true;
              short_value_string = QString("...");
              // TODO: what kind of short version can be printed for arrays?
            }
        }
    }

  if (use_short_value_string)
    {
      _value = short_value_string;
    }
  else
    {
      std::stringstream buffer;
      ov.print (buffer, true);
      _value  = QString::fromStdString (buffer.str ());
    }
  _value.replace("\n", " ");

  _dimension = QString::fromStdString (dv.str ());

  _hash = _scope + qHash (_symbol) + qHash (_class_name) + qHash (_value)
    + qHash (_dimension);
}