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()));
}