Source Code (Use browser search to find items of interest.)

Class Index

kdevelop'CLogFileView (./kdevelop/kdevelop/clogfileview.h:39)

class CLogFileView : public CTreeView, public Component
{
  Q_OBJECT 
public: 

  /** construtor */
  CLogFileView(QWidget*parent=0,const char* name=0,bool s_path=false);

  /** destructor */
  ~CLogFileView();

  /** starts the refresh */
  void refresh(CProject* prj);
  /** store the internal state to the projectfile*/
  void storeState(CProject* prj);
  
  /** set the filename that will be selected after a refresh*/
  void setPreSelectedItem(QString rel_filename);
  /** select the first item, after a refresh*/
  void setFirstItemSelected();

  /** disabled the popupmenus, used in cfilepropdialog */
  void setPopupMenusDisabled();
  /** all groups are opened after a refresh*/
  void setAllGroupsOpened(){allgroups_opened=true;}
  /** returns the relative filename*/
  QString getFileName(QListViewItem* item);
  QString getFullFilename(QListViewItem* item);
  bool showPath(){return show_path;}

protected: // Implementations of virtual methods.

  /** Get the current popupmenu. */
  virtual KPopupMenu *getCurrentPopup();

  // Component notifications:
  virtual void projectClosed();
  virtual void projectOpened(CProject *prj);
    
protected:
  void split(QString str,QStrList& filters);
 protected slots:
    void slotSelectionChanged( QListViewItem *);
    void slotNewClass();
    void slotNewFile();
    void slotNewGroup();
    void slotFileProp();
    void slotFileRemove();
    void slotFileDelete();
    void slotGroupProp();
    void slotGroupRemove();
    void slotAddToRepository();
    void slotRemoveFromRepository();
    void slotUpdate();
    void slotCommit();
    /**  */
	  void slotShowPath();
    
 signals:
    void selectedNewClass();
    void selectedNewFile();
    void showFileProperties(QString file);
    void selectedFileRemove(QString file);
    void selectedGroupProp();
    void logFileTreeSelected(QString);
    void menuItemHighlighted(int);
    void commitFileToVCS(QString file);
    void updateFileFromVCS(QString file);

protected:
  KPopupMenu *popup;
  bool popupmenu_disable;
  bool firstitemselect;
  bool allgroups_opened;
  bool show_path;

  CProject* project;
  QString preselectitem;
  /** store the long relative filename for every item*/
  QPtrDict <char>* dict;
  
};

kdevelop'CLogFileView::CLogFileView() (./kdevelop/kdevelop/clogfileview.cpp:40)

CLogFileView::CLogFileView(QWidget*parent,const char* name,bool s_path)
  : CTreeView(parent,name)
{
  show_path = s_path;
  // Create the popupmenus.
  popup = 0;
 
  connect(this,
          SIGNAL(selectionChanged(QListViewItem*)),
          SLOT(slotSelectionChanged(QListViewItem *)));

  preselectitem = ""; // no preselect
  firstitemselect = false;
  allgroups_opened= false;
  dict = new QPtrDict <char>;
  dict->setAutoDelete(true);
}


kdevelop'CLogFileView::~CLogFileView() (./kdevelop/kdevelop/clogfileview.cpp:58)

CLogFileView::~CLogFileView(){
}



/*********************************************************************
 *                                                                   *
 *                          PUBLIC METHODS                           *
 *                                                                   *
 ********************************************************************/



kdevelop'CLogFileView::projectClosed() (./kdevelop/kdevelop/clogfileview.cpp:70)

void CLogFileView::projectClosed()
{
    clear();
}



kdevelop'CLogFileView::projectOpened() (./kdevelop/kdevelop/clogfileview.cpp:76)

void CLogFileView::projectOpened(CProject *prj)
{
    refresh(prj);
}


/*-------------------------------------------- CLogFileView::refresh()
 * refresh()
 *   Add all files in the project.
 *
 * Parameters:
 *   proj          The project specification.
 *
 * Returns:
 *   -
 *-----------------------------------------------------------------*/

kdevelop'CLogFileView::refresh() (./kdevelop/kdevelop/clogfileview.cpp:92)

void CLogFileView::refresh(CProject* prj)
{
  assert( prj != NULL );

  QListViewItem *lastGrp;
  QListViewItem *top_item;
  QListViewItem *current_item;
  QStrList files;
  QStrList groups;
  QStrList filters;
  QStrList temp_files;

 
  // get all opengroups
  QStrList opengroups;
  prj->getLFVOpenGroups(opengroups);
  
  QRegExp filter_exp("",true,true);// set Wildcard
  char *group_str;
  char *filter_str;
  char *temp_str;
  QString filename;
  QString* p_filename;
  bool item_already_selected = false;

  // Remove all entries.
  treeH->clear();
  dict->clear();
  // Not a valid project.
  if (!prj->valid)
  {
    return;
  }

  project = prj;
  
  // Add the root item.
  top_item = treeH->addRoot( prj->getProjectName(), THPROJECT );

  prj->getLFVGroups(groups);
  prj->getAllFiles(files);
  for(group_str = groups.first();
      group_str != NULL;
      group_str = groups.next())
  { 
    // Add the group item.
    lastGrp = treeH->addItem( group_str, THFOLDER, top_item );

    // Add files belonging to the group.
    prj->getFilters( group_str, filters );
    for( filter_str = filters.first();
         filter_str != 0;
         filter_str=filters.next())
    {
      filter_exp = filter_str;

      // Check every file
      for( filename = files.first();
           !filename.isEmpty();
           filename = files.next())
      { 
        // If found
        if( filename.find( filter_exp ) != -1)
        {
          if(show_path) {
             current_item = treeH->addItem(filename, THC_FILE, lastGrp );
	  }
	  else{  // fill the dict, because the path is not stored into the tree
	    QString fname = QFileInfo("/"+filename).fileName();
	    current_item = treeH->addItem( fname , THC_FILE, lastGrp );
	    p_filename = new QString;
	    dict->insert(current_item,*p_filename = filename);
	  }
	  //	  cerr << ":" << current_item << ":" << filename << endl;
	  if(firstitemselect == true && item_already_selected == false){
	    setSelected(current_item,true);
	    item_already_selected = true;
	  }
	  if(filename == preselectitem) setSelected(current_item,true);
          temp_files.append(filename);
        }
      }

      // Remove the saved files from the filelist
      for(temp_str = temp_files.first();
          temp_str != NULL;
          temp_str = temp_files.next())
      {
        files.remove(temp_str);
      }

      temp_files.clear();
    }

    treeH->setLastItem( lastGrp );
    if(opengroups.contains(lastGrp->text(0)) > 0){
      setOpen( lastGrp, true );
    }
    if(allgroups_opened){
      setOpen( lastGrp, true );
    }
  }

  setOpen(top_item, true);

  preselectitem =""; // no preselect on the next refresh
  popupmenu_disable = false;
  

}
/** set the filename that will be selected after a refresh*/


kdevelop'CLogFileView::setPreSelectedItem() (./kdevelop/kdevelop/clogfileview.cpp:204)

void CLogFileView::setPreSelectedItem(QString rel_filename){
  preselectitem = rel_filename;
}

/** select the first item, after a refresh*/

kdevelop'CLogFileView::setFirstItemSelected() (./kdevelop/kdevelop/clogfileview.cpp:209)

void CLogFileView::setFirstItemSelected(){
  firstitemselect = true;
}

/** disabled the popupmenus, used in cfilepropdialog */

kdevelop'CLogFileView::setPopupMenusDisabled() (./kdevelop/kdevelop/clogfileview.cpp:214)

void CLogFileView::setPopupMenusDisabled(){
  popupmenu_disable = true;
}

/** Get the current popupmenu. */

kdevelop'CLogFileView::getCurrentPopup() (./kdevelop/kdevelop/clogfileview.cpp:219)

KPopupMenu *CLogFileView::getCurrentPopup()
{
  if(popupmenu_disable == true) return 0; // popupmenu
  
  if (popup)
    delete popup;
  
  switch( treeH->itemType() )
  {
    case THPROJECT:
      popup = new KPopupMenu(i18n("Project/LFV"));
      popup->insertItem( i18n("New File..."),
                         this, SLOT(slotNewFile()), 0, ID_FILE_NEW);
      popup->insertItem( i18n("New Class..."),
                         this, SLOT(slotNewClass()), 0, ID_PROJECT_NEW_CLASS );
      popup->insertItem( i18n("New Group..."), 
                         this, SLOT(slotNewGroup()), 0, ID_LFV_NEW_GROUP );
      popup->insertSeparator();
      popup->insertItem( i18n("Show relative path"),
                         this, SLOT(slotShowPath()), 0, ID_LFV_SHOW_PATH_ITEM );
      popup->setCheckable(true);
      if(show_path) popup->setItemChecked(ID_LFV_SHOW_PATH_ITEM, true);
      break;
    case THFOLDER:
      popup = new KPopupMenu(i18n("Group"));
      popup->insertItem( i18n("New Group..."),
                         this, SLOT(slotNewGroup()), 0, ID_LFV_NEW_GROUP );
      popup->insertSeparator();
      popup->insertItem( i18n("Remove Group"),
                         this, SLOT(slotGroupRemove()), 0, ID_LFV_REMOVE_GROUP );
      popup->insertSeparator();
      popup->insertItem( i18n("Properties..."),
                         this, SLOT(slotGroupProp()), 0, ID_LFV_GROUP_PROP );
      break;
    case THC_FILE:
      popup = new KPopupMenu(i18n("File"));
      popup->insertItem( i18n("New File..."),
                         this,SLOT(slotNewFile()), 0, ID_FILE_NEW );
      popup->insertItem( i18n("Remove File from Project..."),
                         this,SLOT(slotFileRemove()), 0, ID_PROJECT_REMOVE_FILE );
      popup->insertItem( *(treeH->getIcon( THDELETE )), i18n("Remove File from Disk..."),
                         this, SLOT(slotFileDelete()), 0, ID_FILE_DELETE );
      popup->insertSeparator();
      popup->insertItem( i18n("Properties..."),
                         this, SLOT(slotFileProp()), 0, ID_PROJECT_FILE_PROPERTIES );

      if (project->getVersionControl())
          {
              VersionControl::State reg =
                  project->getVersionControl()->registeredState(getFullFilename(currentItem()));
              int id;
              popup->insertSeparator();
              id = popup->insertItem( i18n("Update"),
                                      this, SLOT(slotUpdate()) );
              popup->setItemEnabled(id, reg & VersionControl::canBeCommited);
              id = popup->insertItem( i18n("Commit"),
                                      this, SLOT(slotCommit()) );
              popup->setItemEnabled(id, reg & VersionControl::canBeCommited);
              id = popup->insertItem( i18n("Add to Repository"),
                                      this, SLOT(slotAddToRepository()) );
              popup->setItemEnabled(id, reg & VersionControl::canBeAdded);
              id = popup->insertItem( i18n("Remove from Repository (and Disk)"),
                                      this, SLOT(slotRemoveFromRepository()) );
              popup->setItemEnabled(id, !(reg & VersionControl::canBeAdded));
          }
      break;
    default:
      popup = 0;
      break;
  }

  if (popup)
      connect(popup, SIGNAL(highlighted(int)), SIGNAL(menuItemHighlighted(int)));
  return popup;
}

/*********************************************************************
 *                                                                   *
 *                              SLOTS                                *
 *                                                                   *
 ********************************************************************/


kdevelop'CLogFileView::slotSelectionChanged() (./kdevelop/kdevelop/clogfileview.cpp:301)

void CLogFileView::slotSelectionChanged( QListViewItem* item)
{
  if ( (mouseBtn == LeftButton || mouseBtn == MidButton)
       && treeH->itemType() == THC_FILE )
    emit logFileTreeSelected(getFullFilename(item));
}



kdevelop'CLogFileView::slotNewClass() (./kdevelop/kdevelop/clogfileview.cpp:309)

void CLogFileView::slotNewClass(){
  emit selectedNewClass();
}



kdevelop'CLogFileView::slotNewFile() (./kdevelop/kdevelop/clogfileview.cpp:314)

void CLogFileView::slotNewFile(){
  emit selectedNewFile();
}



kdevelop'CLogFileView::slotFileProp() (./kdevelop/kdevelop/clogfileview.cpp:319)

void CLogFileView::slotFileProp()
{
  emit showFileProperties(getFileName(currentItem()));
}



kdevelop'CLogFileView::slotGroupProp() (./kdevelop/kdevelop/clogfileview.cpp:325)

void CLogFileView::slotGroupProp(){
  QStrList filters;
  QString filter_str,str;
  QString name = currentItem()->text(0);
  CGroupPropertiesDlg dlg;
  dlg.setCaption(i18n("Group Properties..."));
  dlg.name_edit->setText(name);
  dlg.name_edit->setEnabled(false);
  
  project->getFilters(name,filters);
  for(str = filters.first();str !=0;str = filters.next()){
    filter_str = filter_str + str +",";
  }
  dlg.filters_edit->setText(filter_str);
  if(dlg.exec()){ // ok clicked
    filter_str = dlg.filters_edit->text(); // get text
    split(filter_str,filters); // fill the filterlist
    project->setFilters(name,filters);
    refresh(project);
  }
  
  //emit selectedGroupProp();
}



kdevelop'CLogFileView::slotNewGroup() (./kdevelop/kdevelop/clogfileview.cpp:350)

void CLogFileView::slotNewGroup(){
  CGroupPropertiesDlg dlg;
  QString current_group = currentItem()->text(0);
  QStrList filters;
  dlg.setCaption(i18n("New Group ..."));
  if(dlg.exec()){// if clicked ok
    QString ace_group;
    QString name = dlg.name_edit->text();
    if(!name.isEmpty()){
      project->addLFVGroup(name,current_group);
      split(dlg.filters_edit->text(),filters);
      project->setFilters(name,filters);
      refresh(project);
    }
  } 
}



kdevelop'CLogFileView::slotFileRemove() (./kdevelop/kdevelop/clogfileview.cpp:368)

void CLogFileView::slotFileRemove()
{
  QString filename=getFileName(currentItem());
  QString msg = i18n("Do you really want to remove the file\n%1\nfrom project?\n\t\tIt will remain on disk.").arg(filename);
  if (KMessageBox::warningYesNo(0, msg) == KMessageBox::No)
    return;

  emit selectedFileRemove(filename);
}



kdevelop'CLogFileView::slotFileDelete() (./kdevelop/kdevelop/clogfileview.cpp:379)

void CLogFileView::slotFileDelete()
{
  QString filename=getFileName(currentItem());
  if (KMessageBox::warningYesNo(0, i18n("Do you really want to delete the file %1?\nThere is no way to restore it!").arg(filename)) == KMessageBox::No){
    return;
  }
  QString name = dict->find(currentItem());
  name = project->getProjectDir() + name;
  KShellProcess* proc = new KShellProcess;
  QFileInfo info(name);
  QString command = "rm -f " + name;
  //  cerr << "\n\n" << command << "\n\n";
  *proc << command;
  proc->start();

  if(show_path) {
	  emit selectedFileRemove(currentItem()->text(0));
  }
  else{
	  emit selectedFileRemove(dict->find(currentItem()));
	}
  
}



kdevelop'CLogFileView::getFileName() (./kdevelop/kdevelop/clogfileview.cpp:404)

QString CLogFileView::getFileName(QListViewItem* item){
	if(show_path){
		return item->text(0);
	}
 	return  dict->find(item);
}



kdevelop'CLogFileView::getFullFilename() (./kdevelop/kdevelop/clogfileview.cpp:412)

QString CLogFileView::getFullFilename(QListViewItem* item)
{
    return project->getProjectDir() + getFileName(item);
}



kdevelop'CLogFileView::slotGroupRemove() (./kdevelop/kdevelop/clogfileview.cpp:418)

void CLogFileView::slotGroupRemove(){
  QString name = currentItem()->text(0);
  project->removeLFVGroup(name);
  refresh(project);
  
}



kdevelop'CLogFileView::split() (./kdevelop/kdevelop/clogfileview.cpp:426)

void CLogFileView::split(QString str,QStrList& filters){
  int pos=0;
  int next=0;
  QString str2;
  filters.clear();
  if(str[str.length()-1] != ','){
    str = str + ',';
  }
  
  while(next != -1){
    next = str.find(',',pos);
    if(next != -1){
      str2 = str.mid(pos,next-pos);
      filters.append(str2);
    }
    pos = next+1;
  }
  
  return ;
}



kdevelop'CLogFileView::storeState() (./kdevelop/kdevelop/clogfileview.cpp:448)

void CLogFileView::storeState(CProject* prj){
  assert( prj != NULL );

  if(childCount() == 0) return; // save no empty tree
  QStrList opengroups;
  
  QListViewItem* ch_grp_item = firstChild();
  if(ch_grp_item != 0){
    ch_grp_item = ch_grp_item->firstChild();
    if(ch_grp_item != 0){
      while(ch_grp_item){
	if(isOpen(ch_grp_item)){
	  opengroups.append(ch_grp_item->text(0));
	}
	ch_grp_item = ch_grp_item->nextSibling();
      }
    }
  }
  prj->setLFVOpenGroups(opengroups);
}



/**  */

kdevelop'CLogFileView::slotShowPath() (./kdevelop/kdevelop/clogfileview.cpp:472)

void CLogFileView::slotShowPath()
{
  show_path = !show_path;
  refresh(project);	
}



kdevelop'CLogFileView::slotAddToRepository() (./kdevelop/kdevelop/clogfileview.cpp:479)

void CLogFileView::slotAddToRepository()
{
    project->getVersionControl()->add(getFullFilename(currentItem()));
}



kdevelop'CLogFileView::slotRemoveFromRepository() (./kdevelop/kdevelop/clogfileview.cpp:485)

void CLogFileView::slotRemoveFromRepository()
{
    project->getVersionControl()->remove(getFullFilename(currentItem()));
    refresh(project);
}
 


kdevelop'CLogFileView::slotUpdate() (./kdevelop/kdevelop/clogfileview.cpp:492)

void CLogFileView::slotUpdate()
{
   emit updateFileFromVCS(getFullFilename(currentItem()));
}



kdevelop'CLogFileView::slotCommit() (./kdevelop/kdevelop/clogfileview.cpp:498)

void CLogFileView::slotCommit()
{
    emit commitFileToVCS(getFullFilename(currentItem()));
}