CTAGS : multiple jump OK ... ==> need to go back now...

This commit is contained in:
Edouard Dupin 2011-08-14 11:32:31 +02:00
parent 0eeb214369
commit 1f08a99ac1
3 changed files with 73 additions and 38 deletions

View File

@ -72,11 +72,11 @@ MainWindows::MainWindows(void) : MsgBroadcast("Main Windows", EDN_CAT_GUI)
// TreeView : // TreeView :
gtk_box_pack_start(GTK_BOX(hbox), m_BufferView.GetMainWidget(), FALSE, TRUE, 1); gtk_box_pack_start(GTK_BOX(hbox), m_BufferView.GetMainWidget(), FALSE, TRUE, 1);
// Tex displayer : // Text displayer :
gtk_box_pack_start( GTK_BOX (hbox), m_CodeView.GetMainWidget(), TRUE, TRUE, 0); gtk_box_pack_start( GTK_BOX (hbox), m_CodeView.GetMainWidget(), TRUE, TRUE, 0);
// Create the status bar // Create the status bar
gtk_box_pack_end(GTK_BOX(vbox), m_StatusBar.GetWidget(), FALSE, FALSE, 0); //gtk_box_pack_end(GTK_BOX(vbox), m_StatusBar.GetWidget(), FALSE, FALSE, 0);
// recursive version of gtk_widget_show // recursive version of gtk_widget_show
gtk_widget_show_all(m_mainWindow); gtk_widget_show_all(m_mainWindow);

View File

@ -169,30 +169,48 @@ enum
CTAGS_NUM_COLS CTAGS_NUM_COLS
}; };
GtkTreeModel * CTagsManager::CreateAndFillModel(void) void CTagsManager::cb_row (GtkTreeView *p_treeview,
GtkTreePath * p_path,
GtkTreeViewColumn * p_column,
gpointer data)
{ {
GtkListStore * store; EDN_DEBUG("event");
CTagsManager * self = reinterpret_cast<CTagsManager*>(data);
gchar * p_file=NULL;
gint lineNumber;
GtkTreeIter iter; GtkTreeIter iter;
store = gtk_list_store_new(CTAGS_NUM_COLS, G_TYPE_STRING, G_TYPE_UINT);
// Append a row and fill in some data if (gtk_tree_model_get_iter( GTK_TREE_MODEL(self->m_listStore), &iter, p_path))
for (int32_t iii=0; iii<m_currentList.Size() ; iii++) { {
gtk_list_store_append(store, &iter); gtk_tree_model_get( GTK_TREE_MODEL(self->m_listStore),
gtk_list_store_set(store, &iter, &iter,
CTAGS_COL_FILE, m_currentList[iii].filename, CTAGS_COL_FILE, &p_file,
CTAGS_COL_LINE_NUMBER, m_currentList[iii].lineID, CTAGS_COL_LINE_NUMBER, &lineNumber,
-1); -1 );
EDN_DEBUG("find : " << p_file << ":" << lineNumber);
for (int32_t iii = 0; iii < self->m_currentList.Size() ; iii++) {
if( self->m_currentList[iii].lineID == lineNumber
&& strcmp(self->m_currentList[iii].filename, p_file)==0)
{
g_object_unref( GTK_TREE_MODEL(self->m_listStore));
// Remove dialogue
gtk_widget_destroy(self->m_Dialog);
// Jump ...
self->JumpAtID(iii);
return;
}
}
} }
return GTK_TREE_MODEL(store);
} }
GtkWidget * CTagsManager::CreateViewAndModel(void) GtkWidget * CTagsManager::CreateViewAndModel(void)
{ {
GtkCellRenderer * renderer; GtkCellRenderer * renderer;
GtkTreeModel * model;
GtkWidget * view; GtkWidget * view;
view = gtk_tree_view_new(); view = gtk_tree_view_new();
@ -214,11 +232,21 @@ GtkWidget * CTagsManager::CreateViewAndModel(void)
"text", CTAGS_COL_LINE_NUMBER, "text", CTAGS_COL_LINE_NUMBER,
NULL); NULL);
model = CreateAndFillModel(); // Set data in the list :
GtkTreeIter iter;
m_listStore = gtk_list_store_new(CTAGS_NUM_COLS, G_TYPE_STRING, G_TYPE_UINT);
// Append a row and fill in some data
for (int32_t iii=0; iii<m_currentList.Size() ; iii++) {
gtk_list_store_append(m_listStore, &iter);
gtk_list_store_set(m_listStore, &iter,
CTAGS_COL_FILE, m_currentList[iii].filename,
CTAGS_COL_LINE_NUMBER, m_currentList[iii].lineID,
-1);
}
gtk_tree_view_set_model(GTK_TREE_VIEW (view), model); gtk_tree_view_set_model( GTK_TREE_VIEW(view), GTK_TREE_MODEL(m_listStore) );
g_signal_connect( G_OBJECT(view), "row-activated", G_CALLBACK(cb_row), /*(gpointer)p_model*/ this );
g_object_unref(model); //g_object_unref(GTK_TREE_MODEL(m_listStore));
return view; return view;
} }
@ -230,31 +258,34 @@ GtkWidget * CTagsManager::CreateViewAndModel(void)
int32_t CTagsManager::MultipleJump(void) int32_t CTagsManager::MultipleJump(void)
{ {
// dlg to confirm the quit event : // dlg to confirm the quit event :
GtkWidget *myDialog = gtk_dialog_new_with_buttons("C-Tags jump...", m_Dialog = gtk_dialog_new_with_buttons("C-Tags jump...",
NULL, NULL,
GTK_DIALOG_MODAL, GTK_DIALOG_MODAL,
"Jump", GTK_RESPONSE_YES, //"Jump", GTK_RESPONSE_YES,
GTK_STOCK_QUIT, GTK_RESPONSE_NO, GTK_STOCK_QUIT, GTK_RESPONSE_NO,
NULL); NULL);
// Set over main windows // Set over main windows
//gtk_window_set_transient_for(GTK_WINDOW(myDialog), GTK_WINDOW(m_mainWindow->GetWidget())); //gtk_window_set_transient_for(GTK_WINDOW(myDialog), GTK_WINDOW(m_mainWindow->GetWidget()));
// add writting area // add writting area
GtkWidget *myContentArea = gtk_dialog_get_content_area( GTK_DIALOG(myDialog)); GtkWidget *myContentArea = gtk_dialog_get_content_area( GTK_DIALOG(m_Dialog));
GtkWidget *listView = CreateViewAndModel(); GtkWidget *listView = CreateViewAndModel();
gtk_box_pack_start(GTK_BOX(myContentArea), listView, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(myContentArea), listView, TRUE, TRUE, 0);
// Display it // Display it
gtk_widget_show_all(myContentArea); gtk_widget_show_all(myContentArea);
int32_t result = gtk_dialog_run(GTK_DIALOG(myDialog)); int32_t result = gtk_dialog_run(GTK_DIALOG(m_Dialog));
// Get data from the gtk entry // Get data from the gtk entry
result = 0; // remove warning if (result == GTK_RESPONSE_NO) {
g_object_unref(GTK_TREE_MODEL(m_listStore));
// Remove dialogue
gtk_widget_destroy(m_Dialog);
}
//GtkTreeIter *myIter; //GtkTreeIter *myIter;
//gtk_tree_selection_get_selected(selection, &model, myIter); //gtk_tree_selection_get_selected(selection, &model, myIter);
// Remove dialogue // Remove dialogue
gtk_widget_destroy(myDialog); //gtk_widget_destroy(myDialog);
return 0; return 0;
} }
/* /*
@ -270,7 +301,7 @@ void BufferView::OnCtagsEventList(GtkWidget *menuitem, gpointer data)
void CTagsManager::JumpAtID(int32_t selectID) void CTagsManager::JumpAtID(int32_t selectID)
{ {
BufferManager *myBufferManager = BufferManager::getInstance(); BufferManager *myBufferManager = BufferManager::getInstance();
Edn::File myFile = m_currentList[0].filename; Edn::File myFile = m_currentList[selectID].filename;
EDN_INFO(" OPEN the TAG file Destination : " << myFile ); EDN_INFO(" OPEN the TAG file Destination : " << myFile );
if (false == myBufferManager->Exist(myFile) ) { if (false == myBufferManager->Exist(myFile) ) {
// need to open the file : // need to open the file :
@ -292,7 +323,7 @@ void CTagsManager::JumpAtID(int32_t selectID)
int32_t destLine = myBufferManager->Get(localId)->FindLine(pattern); int32_t destLine = myBufferManager->Get(localId)->FindLine(pattern);
SendMessage(EDN_MSG__CURRENT_GOTO_LINE, destLine); SendMessage(EDN_MSG__CURRENT_GOTO_LINE, destLine);
*/ */
SendMessage(EDN_MSG__CURRENT_GOTO_LINE, m_currentList[0].lineID); SendMessage(EDN_MSG__CURRENT_GOTO_LINE, m_currentList[selectID].lineID - 1);
} }

View File

@ -68,10 +68,14 @@ class CTagsManager: public Singleton<CTagsManager>, public MsgBroadcast
Edn::VectorType<Edn::File*> m_historyList; Edn::VectorType<Edn::File*> m_historyList;
Edn::VectorType<TagListFind_ts> m_currentList; Edn::VectorType<TagListFind_ts> m_currentList;
void JumpAtID(int32_t selectID); void JumpAtID(int32_t selectID);
GtkTreeModel * CreateAndFillModel(void);
GtkWidget * CreateViewAndModel(void); GtkWidget * CreateViewAndModel(void);
static void cb_row (GtkTreeView *p_treeview,
// TMP Val : GtkTreePath * p_path,
GtkTreeViewColumn * p_column,
gpointer p_data);
// save data in the list :
GtkListStore * m_listStore;
GtkWidget * m_Dialog;
}; };
#endif #endif