Klaas Freitag 14 лет назад
Родитель
Сommit
ced69489a5
4 измененных файлов с 119 добавлено и 40 удалено
  1. 1 0
      src/mirall/application.cpp
  2. 97 8
      src/mirall/statusdialog.cpp
  3. 18 0
      src/mirall/statusdialog.h
  4. 3 32
      src/mirall/statusdialog.ui

+ 1 - 0
src/mirall/application.cpp

@@ -127,6 +127,7 @@ void Application::slotTrayClicked( QSystemTrayIcon::ActivationReason reason )
       qDebug() << "No configured folders yet, start the Owncloud integration dialog.";
       _owncloudSetup->startWizard();
     } else {
+      _statusDialog->setFolderList( _folderMap );
       _statusDialog->exec();
     }
   }

+ 97 - 8
src/mirall/statusdialog.cpp

@@ -10,28 +10,117 @@
  * 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.
- */#include <QtCore>
+ */
+
+ #include <QtCore>
+ #include <QtGui>
 
 #include "statusdialog.h"
 #include "folder.h"
 
 
 namespace Mirall {
+FolderViewDelegate::FolderViewDelegate()
+{
+
+}
+
+FolderViewDelegate::~FolderViewDelegate()
+{
+  // TODO Auto-generated destructor stub
+}
+
+//alocate each item size in listview.
+QSize FolderViewDelegate::sizeHint(const QStyleOptionViewItem & option ,
+                                   const QModelIndex & index) const
+{
+  int h = 64; // height 64 + 4px margin top and down
+  int w = 0;
+
+  QString p = qvariant_cast<QString>(index.data(FolderPathRole));
+  QFont font = QApplication::font();
+  QFontMetrics fm(font);
+  w = 8 + fm.boundingRect( p ).width();
+
+  return QSize( w, h );
+}
+
+void FolderViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
+                               const QModelIndex &index) const
+{
+  QStyledItemDelegate::paint(painter,option,index);
+
+  painter->save();
+
+  QFont font = QApplication::font();
+  QFont SubFont = QApplication::font();
+  //font.setPixelSize(font.weight()+);
+  font.setBold(true);
+  SubFont.setWeight(SubFont.weight()-2);
+  QFontMetrics fm(font);
+
+  QIcon icon = qvariant_cast<QIcon>(index.data(FolderIconRole));
+  QString aliasText = qvariant_cast<QString>(index.data(FolderNameRole));
+  QString pathText = qvariant_cast<QString>(index.data(FolderPathRole));
+
+  QSize iconsize = icon.actualSize(option.decorationSize);
+
+  QRect headerRect = option.rect;
+  QRect subheaderRect = option.rect;
+  QRect iconRect = subheaderRect;
+
+  iconRect.setRight(iconsize.width()+30);
+  iconRect.setTop(iconRect.top()+5);
+  headerRect.setLeft(iconRect.right());
+  subheaderRect.setLeft(iconRect.right());
+  headerRect.setTop(headerRect.top()+5);
+  headerRect.setBottom(headerRect.top()+fm.height());
+
+  subheaderRect.setTop(headerRect.bottom()+2);
+
+  //painter->drawPixmap(QPoint(iconRect.right()/2,iconRect.top()/2),icon.pixmap(iconsize.width(),iconsize.height()));
+  painter->drawPixmap(QPoint(iconRect.left()+iconsize.width()/2+2,iconRect.top()+iconsize.height()/2+3),icon.pixmap(iconsize.width(),iconsize.height()));
+
+  painter->setFont(font);
+  painter->drawText(headerRect, aliasText);
+
+
+  painter->setFont(SubFont);
+  painter->drawText(subheaderRect.left(),subheaderRect.top()+17, pathText);
+
+  painter->restore();
+
+}
+
+ // ====================================================================================
 
 StatusDialog::StatusDialog(QWidget *parent) :
     QDialog(parent)
 {
-    setupUi( this  );
+  setupUi( this  );
+
+  _model = new QStandardItemModel();
+  FolderViewDelegate *delegate = new FolderViewDelegate();
 
-    connect(_ButtonClose, SIGNAL(clicked()), this, SLOT(accept()));
-    connect(_ButtonRemove, SIGNAL(clicked()), this, SLOT(slotRemoveFolder()));
+  _folderList->setItemDelegate( delegate );
+  _folderList->setModel( _model );
+
+  connect(_ButtonClose, SIGNAL(clicked()), this, SLOT(accept()));
+  connect(_ButtonRemove, SIGNAL(clicked()), this, SLOT(slotRemoveFolder()));
 }
 
-void StatusDialog::setFolderList( QHash<QString, Folder*> folders )
+void StatusDialog::setFolderList( Folder::Map folders )
 {
-    foreach( QString f, folders.keys() ) {
-        qDebug() << "Folder: " << f;
-    }
+  _model->clear();
+
+  foreach( Folder *f, folders ) {
+    qDebug() << "Folder: " << f;
+    QStandardItem *item = new QStandardItem();
+    item->setData( QIcon::fromTheme( "folder-sync" ), FolderViewDelegate::FolderIconRole );
+    item->setData( f->path(),  FolderViewDelegate::FolderPathRole );
+    item->setData( f->alias(),  FolderViewDelegate::FolderNameRole );
+    _model->appendRow( item );
+  }
 }
 
 void StatusDialog::slotRemoveFolder()

+ 18 - 0
src/mirall/statusdialog.h

@@ -16,12 +16,27 @@
 #define STATUSDIALOG_H
 
 #include <QDialog>
+#include <QStyledItemDelegate>
+#include <QStandardItemModel>
 
 #include "ui_statusdialog.h"
 #include "application.h"
 
 namespace Mirall {
 
+class FolderViewDelegate : public QStyledItemDelegate
+{
+    public:
+    FolderViewDelegate();
+    virtual ~FolderViewDelegate();
+
+    enum datarole { FolderNameRole = Qt::UserRole + 100,
+                    FolderPathRole = Qt::UserRole + 101,
+                    FolderIconRole = Qt::UserRole + 102 };
+    void paint( QPainter*, const QStyleOptionViewItem&, const QModelIndex& ) const;
+    QSize sizeHint( const QStyleOptionViewItem&, const QModelIndex& ) const;
+};
+
 class StatusDialog : public QDialog, public Ui::statusDialog
 {
     Q_OBJECT
@@ -33,6 +48,9 @@ signals:
 
 public slots:
     void slotRemoveFolder();
+
+private:
+    QStandardItemModel *_model;
 };
 };
 

+ 3 - 32
src/mirall/statusdialog.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>334</width>
-    <height>283</height>
+    <width>407</width>
+    <height>269</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -31,36 +31,7 @@
      <item>
       <layout class="QVBoxLayout" name="verticalLayout">
        <item>
-        <widget class="QListWidget" name="_folderList">
-         <property name="minimumSize">
-          <size>
-           <width>0</width>
-           <height>80</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="_folderDetails">
-         <property name="minimumSize">
-          <size>
-           <width>0</width>
-           <height>60</height>
-          </size>
-         </property>
-         <property name="frameShape">
-          <enum>QFrame::Panel</enum>
-         </property>
-         <property name="frameShadow">
-          <enum>QFrame::Sunken</enum>
-         </property>
-         <property name="lineWidth">
-          <number>1</number>
-         </property>
-         <property name="text">
-          <string>TextLabel</string>
-         </property>
-        </widget>
+        <widget class="QListView" name="_folderList"/>
        </item>
       </layout>
      </item>