#include "DBTreeView.h" #include "DBEdtEngine.h" #include "DBTreeItem.h" #include #include #include #include #include #include #include //Added by qt3to4: #include #include #include #include DBListView::DBListView(QWidget* parent, const char* name, Qt::WFlags fl ) : Q3ListView(parent,name,fl) { m_leftPressed=false; m_inDrag = false; m_dragItem = 0; } void DBListView::contentsMousePressEvent( QMouseEvent *evt ) { //printf("MPE event data: %d %d(%d) %d\n",evt->type(),evt->button(),Qt::LeftButton,evt->state()); Q3ListView::contentsMousePressEvent( evt ); if(evt->button()==Qt::LeftButton){ m_leftPressed=true; if(currentItem()!=0 && currentItem()->isSelected()) m_dragItem = dynamic_cast(currentItem()); else m_dragItem = 0; //printf("locked %s\n", (m_dragItem!=0)?m_dragItem->text(0).latin1():"nothing"); } } void DBListView::contentsMouseReleaseEvent( QMouseEvent *evt ) { Q3ListView::contentsMouseReleaseEvent( evt ); //printf("release %s - %d\n",name(),(int)m_leftPressed); if(!m_leftPressed) m_dragItem = 0; emit droppingInto(evt, m_dragItem); m_leftPressed=false; m_dragItem = 0; } void DBListView::contentsMouseMoveEvent( QMouseEvent *evt ) { //printf("move %s - %d\n",name(),(int)m_leftPressed); if(m_leftPressed){ int vx, vy; contentsToViewport ( evt->x(),evt->y(), vx, vy ) ; //printf("%d %d %d %d\n",vx,vy,viewport()->width(),viewport()->height()); if((vx<0 || vx>viewport()->width() || vy<0 || vy>viewport()->height()) && m_dragItem!=0) emit draggingInto(evt); }else Q3ListView::contentsMouseMoveEvent( evt ); } void DBListView::myDrag(QMouseEvent *evt) { //printf("myDrag in %s: %d %d %d\n",name(),(int)m_inDrag,evt->x(),evt->y()); m_dragItem = dynamic_cast(itemAt(evt->pos())); if(m_dragItem!=0 && !m_dragItem->isInquire()) m_dragItem=0; m_leftPressed = false; if(m_dragItem!=0) setSelected(m_dragItem,true); else clearSelection(); m_inDrag=true; } DBTreeView::DBTreeView(DBEdtEngine &in_engine, QWidget* parent, const char* , Qt::WFlags fl ) : QWidget(parent,fl), m_engine(in_engine) // : DBTreeViewBase(parent,name,fl), m_engine(in_engine) { setupUi(this); QObject::connect(fileList, SIGNAL(activated(QString)), this, SLOT(fillView())); Q3VBoxLayout *DBTreeViewBaseLayout = new Q3VBoxLayout( this, 11, 6, "DBTreeViewBaseLayout"); Q3HBoxLayout *layout1 = new Q3HBoxLayout( 0, 0, 6, "layout1"); layout1->addWidget( textLabel1 ); layout1->addWidget( fileList ); Q3VBoxLayout *layout2 = new Q3VBoxLayout( 0, 0, 6, "layout2"); layout2->addLayout( layout1 ); m_listView = new DBListView( this, ("DBListView_"+QString(this->name())).latin1() ); m_listView->addColumn( tr( "DBInquires/Fields" ) ); m_listView->addColumn( tr( "Type" ) ); layout2->addWidget( m_listView ); DBTreeViewBaseLayout->addLayout( layout2 ); connect( m_listView, SIGNAL( doubleClicked(Q3ListViewItem*) ), this, SLOT( itemDoubleClick(Q3ListViewItem*) ) ); } DBTreeView::~DBTreeView() { } void DBTreeView::updateList() { fileList->clear(); for(std::vector::iterator it=m_engine.beginDBFiles(); it!=m_engine.endDBFiles();it++) fileList->insertItem((*it).c_str()); fillView(); return; } void DBTreeView::fillView() { QApplication::setOverrideCursor(Qt::waitCursor); m_listView->clear(); if(fileList->count()==0){ QApplication::restoreOverrideCursor(); return; // nothing to do } PixLib::PixConfDBInterface *file = m_engine.openFile(fileList->currentText().latin1()); PixLib::DBInquire *root = file->readRootRecord(1); DBTreeItem *rootItem = new DBTreeItem(m_listView, root, fileList->currentText().latin1()); delete file; // close file, not needed any longer rootItem->setOpen(true); QApplication::restoreOverrideCursor(); return; } void DBTreeView::itemDoubleClick(Q3ListViewItem *in_item) { if(in_item==0) return; DBTreeItem *item = dynamic_cast(in_item); if(item==0){ QMessageBox::warning(this,"DBeditor DBTreeView::itemDoubleClick","Item "+in_item->text(0)+ " is not of type DBTreeItem, can't proceed."); return; } item->edit(); }