"Fossies" - the Fresh Open Source Software Archive

Member "TeXmacs-2.1.2-src/src/Plugins/Qt/QTMFileDialog.cpp" (5 May 2022, 5889 Bytes) of package /linux/misc/TeXmacs-2.1.2-src.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "QTMFileDialog.cpp" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 2.1.1_vs_2.1.2.

    1 
    2 /******************************************************************************
    3 * MODULE     : QTMFileDialog.cpp
    4 * DESCRIPTION: QT file choosers
    5 * COPYRIGHT  : (C) 2009 David MICHEL
    6 *******************************************************************************
    7 * This software falls under the GNU general public license version 3 or later.
    8 * It comes WITHOUT ANY WARRANTY WHATSOEVER. For details, see the file LICENSE
    9 * in the root directory or <http://www.gnu.org/licenses/gpl-3.0.html>.
   10 ******************************************************************************/
   11 
   12 #include "QTMFileDialog.hpp"
   13 #include <QPainter>
   14 #include <QLineEdit>
   15 #include <QIntValidator>
   16 #include <QMimeData>
   17 #include <QUrl>
   18 #include <QDrag>
   19 #include <QDragEnterEvent>
   20 #include <QDragLeaveEvent>
   21 #include <QDropEvent>
   22 #include "file.hpp"
   23 #include "sys_utils.hpp"
   24 #include "qt_utilities.hpp"
   25 #include "qt_gui.hpp"
   26 #include "analyze.hpp"
   27 #include "dictionary.hpp"
   28 #include "image_files.hpp"
   29 
   30 QTMFileDialog::QTMFileDialog (QWidget * parent, const QString & caption, 
   31                               const QString & directory, const QString & filter)
   32   : QDialog (parent) 
   33 {
   34   setWindowTitle (caption);
   35   hbox= new QHBoxLayout (this);
   36   hbox->setContentsMargins (0, 0, 0, 0);
   37   file= new QMyFileDialog (0, caption, directory, filter);
   38   file->setOption(QFileDialog::DontUseNativeDialog, true);
   39   hbox->addWidget (file);
   40   setLayout (hbox);
   41   setAcceptDrops(true);
   42   connect(file, SIGNAL(accepted()), this, SLOT(accept()));
   43   connect(file, SIGNAL(finished(int)), this, SLOT(done(int)));
   44   connect(file, SIGNAL(rejected()), this, SLOT(reject()));
   45 }
   46 
   47 void QTMFileDialog::dragEnterEvent(QDragEnterEvent *event)
   48 {
   49     event->acceptProposedAction();
   50 }
   51 
   52 void QTMFileDialog::dragMoveEvent(QDragMoveEvent *event)
   53 {
   54     event->acceptProposedAction();
   55 }
   56 
   57 void QTMFileDialog::dropEvent(QDropEvent *event)
   58 {
   59     const QMimeData *mimeData = event->mimeData();
   60     
   61     foreach (QString format, mimeData->formats()) {
   62         if (format == "text/uri-list") {
   63             file->selectFile(mimeData->urls().at(0).toLocalFile());
   64             break;
   65         }
   66     }
   67     
   68     event->acceptProposedAction();
   69 }
   70 
   71 void QTMFileDialog::dragLeaveEvent(QDragLeaveEvent *event)
   72 {
   73     event->accept();
   74 }
   75 
   76 
   77 static QWidget*
   78 simple_input (string s, QLineEdit* ledit, QWidget* parent= 0) {
   79   QWidget* widget= new QWidget (parent);
   80   QHBoxLayout* layout= new QHBoxLayout (widget);
   81   layout->setContentsMargins (0, 0, 0, 0);
   82 //  string in_lan= get_input_language ();
   83 //  string out_lan= get_output_language ();
   84 //  QLabel* label= new QLabel (to_qstring (tm_var_encode (translate (s, in_lan, out_lan))), parent);
   85   QLabel* label= new QLabel (to_qstring (s), parent);
   86   layout->addWidget (label);
   87   layout->addWidget (ledit);
   88   widget->setLayout (layout);
   89   return widget;
   90 }
   91 
   92 QTMImagePreview::QTMImagePreview (QWidget* parent)
   93   : QWidget (parent) {
   94   QVBoxLayout* vbox= new QVBoxLayout (this);
   95   vbox->addStretch ();
   96   image= new QLabel (this);
   97   image->setMinimumWidth (100);
   98   image->setAlignment (Qt::AlignCenter);
   99   vbox->addWidget (image);
  100   vbox->addSpacing (10);
  101   wid= new QLineEdit (this);
  102   vbox->addWidget (simple_input ("Width:", wid, this));
  103   hei= new QLineEdit (this);
  104   vbox->addWidget (simple_input ("Height:", hei, this));
  105   xps= new QLineEdit (this);
  106   vbox->addWidget (simple_input ("X-position:", xps, this));
  107   yps= new QLineEdit (this);
  108   vbox->addWidget (simple_input ("Y-position:", yps, this));
  109   vbox->addStretch ();
  110   vbox->addStretch ();
  111   setLayout (vbox);
  112   setMinimumWidth (175);
  113   setMaximumWidth (225);
  114   setImage (0);
  115 }
  116 
  117 void 
  118 QTMImagePreview::setImage (const QString& file) {     //generate thumbnail
  119 BEGIN_SLOT
  120   QImage img;
  121   wid->setText ("");
  122   hei->setText ("");
  123   xps->setText ("");
  124   yps->setText ("");
  125 
  126   string localname= from_qstring_utf8 (file);
  127   url image_url= url_system (localname);
  128   if (DEBUG_CONVERT) debug_convert<<"image preview :["<<image_url<<"]"<<LF;
  129   if (!(as_string(image_url)=="") && !is_directory(image_url) && exists(image_url) ){
  130     url temp= url_temp (".png");
  131     int w_pt, h_pt;
  132     double w, h;
  133     image_size (image_url, w_pt, h_pt);
  134     if (w_pt*h_pt !=0) { //necessary if gs returns h=v=0 (for instance 0-size pdf)
  135       wid->setText (QString::number (w_pt) + "pt");
  136       hei->setText (QString::number (h_pt) + "pt");
  137       if (w_pt > h_pt) {
  138         w= 98;
  139         h= ceil (h_pt*98/w_pt);
  140       } else {
  141         w= ceil (w_pt*98/h_pt);
  142         h= 98;
  143       }
  144       // generate thumbnail:
  145       image_to_png (image_url, temp, w, h);
  146       img.load (utf8_to_qstring (as_string (temp)));
  147       remove (temp);
  148     }
  149   }
  150 
  151   if (img.isNull()) {
  152     QImage vide (100, 100, QImage::Format_RGB32);
  153     QPainter painter;
  154     painter.begin (&vide);
  155     painter.fillRect (0, 0, 100, 100, Qt::white);
  156     QPen ThinBlack (Qt::black);
  157     ThinBlack.setWidth (0);
  158     ThinBlack.setStyle (Qt::SolidLine);
  159     painter.setPen (ThinBlack);
  160     painter.drawLine (0, 0, 99, 99);
  161     painter.drawLine (0, 99, 99, 0);
  162     painter.drawRect (0, 0, 99, 99);
  163     painter.end ();
  164     image->setPixmap(QPixmap::fromImage(vide));
  165   }
  166   else
  167     image->setPixmap (QPixmap::fromImage (img.scaled (98, 98, Qt::KeepAspectRatio, Qt::FastTransformation)));
  168 END_SLOT
  169 }
  170 
  171 QTMImageDialog::QTMImageDialog (QWidget* parent, const QString& caption, const QString& directory, const QString& filter)
  172   : QTMFileDialog (parent, caption, directory, filter)
  173 {
  174   preview= new QTMImagePreview (this);
  175   hbox->insertWidget(0, preview);
  176   connect(file, SIGNAL(currentChanged (const QString&)), preview, SLOT(setImage(const QString&)));
  177 }
  178 
  179 string
  180 QTMImageDialog::getParamsAsString () {
  181   string params;
  182   params << "\"" << from_qstring (preview->wid->text ()) << "\" ";
  183   params << "\"" << from_qstring (preview->hei->text ()) << "\" ";
  184   params << "\"" << from_qstring (preview->xps->text ()) << "\" ";
  185   params << "\"" << from_qstring (preview->yps->text ()) << "\"";
  186   return params;
  187 }