/* \fn getFilterFromSelection \brief returns the tag of the selected filter */ VF_FILTERS getFilterFromSelection (void) { uint32_t sel = 0; uint8_t ret = 0; VF_FILTERS tag = VF_INVALID; // 1- identify the current tab/treeview we are in int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(lookup_widget(dialog,"notebook1"))); // then get the selection page++; if ((ret = getSelectionNumber (max, trees[page], stores[page], &sel))) { tag = filterCategories[page-1][sel]->tag; } return tag; }
uint8_t DIA_RecentFiles( char **name ) { uint8_t ret=0; uint32_t nb_item; const char **names; GtkTreeIter iter; dialog=create_dialog1(); gtk_transient(dialog); tree=lookup_widget(dialog,"treeview1"); gtk_signal_connect (GTK_OBJECT (lookup_widget(dialog,"treeview1")), "row-activated", GTK_SIGNAL_FUNC (on_action), (void *)dialog); names=prefs->get_lastfiles(); // count for( nb_item=0;nb_item<4;nb_item++) { if(!names[nb_item]) break; } // printf("\n found %d old files \n",nb_item); if(!nb_item) return 0; for (uint32_t i = 0; i < nb_item; i++) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter,0,names[i],-1); // printf("\n appending %s\n",names[i]); } if(gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_OK) { uint32_t sel; if( (ret=getSelectionNumber(nb_item,tree , store,&sel))) { *name=(char *)names[sel]; } } gtk_widget_destroy(dialog); return ret; }
// // One of the button of the main dialog was pressed // Retrieve also the associated filter and handle // the action //______________________________________________________ void on_action (gui_act action) { uint32_t action_parameter; VF_FILTERS tag = VF_INVALID; action_parameter = 0; if (nb_active_filter > 1) if (getSelectionNumber(nb_active_filter - 1, WID(treeview0), stores[0], &action_parameter)) action_parameter++; switch (action) { case A_ADD: tag = getFilterFromSelection(); if (tag == VF_INVALID) break; CONFcouple *coup; videofilters[nb_active_filter].filter = filterCreateFromTag (tag, NULL, videofilters[nb_active_filter - 1].filter); videofilters[nb_active_filter].tag = tag; if(!videofilters[nb_active_filter].filter-> configure (videofilters[nb_active_filter - 1].filter)) { delete videofilters[nb_active_filter].filter; break; } videofilters[nb_active_filter].filter->getCoupledConf (&coup); videofilters[nb_active_filter].conf = coup; nb_active_filter++; updateFilterList (); setSelectionNumber(nb_active_filter-1, WID(treeview0), stores[0], nb_active_filter-2); break; case A_VCD: setVCD (); updateFilterList (); setSelectionNumber(nb_active_filter-1, WID(treeview0), stores[0], nb_active_filter-2); break; case A_SVCD: setSVCD (); updateFilterList (); setSelectionNumber(nb_active_filter-1, WID(treeview0), stores[0], nb_active_filter-2); break; case A_DVD: setDVD (); updateFilterList (); setSelectionNumber(nb_active_filter-1, WID(treeview0), stores[0], nb_active_filter-2); break; case A_HALFD1: setHalfD1 (); updateFilterList (); setSelectionNumber(nb_active_filter-1, WID(treeview0), stores[0], nb_active_filter-2); break; default: case A_DOUBLECLICK: printf ("Double clicked.."); case A_CONFIGURE: if(!action_parameter) break; if(!videofilters[action_parameter].filter-> configure (videofilters[action_parameter - 1].filter)) break; CONFcouple *couple; videofilters[action_parameter].filter->getCoupledConf (&couple); videofilters[action_parameter].conf = couple; getFirstVideoFilter (); updateFilterList (); setSelectionNumber(nb_active_filter-1, WID(treeview0), stores[0], action_parameter-1); break; case A_PARTIAL: if (!action_parameter) break; AVDMGenericVideoStream *replace; CONFcouple *conf; conf = videofilters[action_parameter].conf; if (videofilters[action_parameter].tag == VF_PARTIAL_FILTER) // cannot recurse { GUI_Error_HIG (QT_TR_NOOP("The filter is already partial"), NULL); break; } replace = new ADMVideoPartial (videofilters[action_parameter - 1]. filter, videofilters[action_parameter].tag, conf); if(replace->configure (videofilters[action_parameter - 1].filter)) { delete videofilters[action_parameter].filter; if (conf) delete conf; videofilters[action_parameter].filter = replace; replace->getCoupledConf (&conf); videofilters[action_parameter].conf = conf; videofilters[action_parameter].tag = VF_PARTIAL_FILTER; getFirstVideoFilter (); updateFilterList (); setSelectionNumber(nb_active_filter-1, WID(treeview0), stores[0], action_parameter-1); } else delete replace; break; case A_UP: if (action_parameter < 2) break; // swap action parameter & action parameter -1 FILTER tmp; memcpy (&tmp, &videofilters[action_parameter - 1], sizeof (FILTER)); memcpy (&videofilters[action_parameter - 1], &videofilters[action_parameter], sizeof (FILTER)); memcpy (&videofilters[action_parameter], &tmp, sizeof (FILTER)); getFirstVideoFilter (); // select action_parameter -1 updateFilterList (); setSelectionNumber (nb_active_filter - 1, WID(treeview0), stores[0], action_parameter - 2); break; case A_DOWN: if (((int) action_parameter < (int) (nb_active_filter - 1)) && (action_parameter)) { // swap action parameter & action parameter -1 FILTER tmp; memcpy (&tmp, &videofilters[action_parameter + 1], sizeof (FILTER)); memcpy (&videofilters[action_parameter + 1], &videofilters[action_parameter], sizeof (FILTER)); memcpy (&videofilters[action_parameter], &tmp, sizeof (FILTER)); getFirstVideoFilter (); updateFilterList (); setSelectionNumber (nb_active_filter - 1, WID(treeview0), stores[0], action_parameter); } break; case A_REMOVE: VF_FILTERS tag; AVDMGenericVideoStream *old; // we store the one we will delete if (action_parameter < 1) break; if (videofilters[action_parameter].conf) { delete videofilters[action_parameter].conf; videofilters[action_parameter].conf = NULL; } // recreate derivated filters for (uint32_t i = action_parameter + 1; i < nb_active_filter; i++) { delete videofilters[i - 1].filter; videofilters[i - 1].filter = filterCreateFromTag(videofilters[i].tag, videofilters[i].conf, videofilters[i - 2].filter); videofilters[i - 1].conf = videofilters[i].conf; videofilters[i - 1].tag = videofilters[i].tag; } delete videofilters[nb_active_filter - 1].filter; videofilters[nb_active_filter - 1].filter = NULL; nb_active_filter--; updateFilterList (); if(!setSelectionNumber(nb_active_filter-1, WID(treeview0), stores[0], action_parameter-1)) setSelectionNumber(nb_active_filter-1, WID(treeview0), stores[0], action_parameter-2); break; case A_DONE: break; case A_PREVIEW: if (!action_parameter) break; extern uint32_t curframe; DIA_filterPreview(QT_TR_NOOP("Preview"), videofilters[action_parameter].filter, curframe); break; case A_LOAD: #ifdef USE_LIBXML2 GUI_FileSelRead (QT_TR_NOOP("Load set of filters"), filterLoadXml); #else GUI_FileSelRead (QT_TR_NOOP("Load set of filters"), filterLoad); #endif updateFilterList (); setSelectionNumber(nb_active_filter-1, WID(treeview0), stores[0], 0); break; case A_CLOSE: //gtk_widget_destroy(dialog); gtk_signal_emit_by_name(GTK_OBJECT(dialog),"delete-event"); break; case A_SAVE: if (nb_active_filter < 2) { GUI_Error_HIG (QT_TR_NOOP("Nothing to save"), NULL); } else #ifdef USE_LIBXML2 GUI_FileSelWrite (QT_TR_NOOP("Save set of filters"), filterSaveXml); #else GUI_FileSelWrite (QT_TR_NOOP("Save set of filters"), filterSave); #endif break; #if 0 default: printf ("Unknown action :%d, action param %d\n", action, action_parameter); ADM_assert (0); #endif } //end of switch }
//************************************************** int getSelection(GtkWidget *dialog) { uint32_t n=0xffff; if(! getSelectionNumber(jobs.nb,WID(treeview1) , jobs.store,&n)) return 0xffff; return n; }
bool CIMIXhView::onKeyEvent(const CKeyEvent& key) { unsigned changeMasks = 0; unsigned keycode = key.code; unsigned keyvalue = key.value; unsigned modifiers = key.modifiers; bool isKeyStroke = false; #ifdef DEBUG printf("Xh View got a key (0x%x-0x%x-0x%x)...\n", keycode, keyvalue, modifiers); if (((modifiers & IM_CTRL_MASK) != 0) && (keyvalue == 'P' || keyvalue == 'p')) m_pIC->printLattice(); #endif if (m_pHotkeyProfile && m_pHotkeyProfile->isModeSwitchKey(key)) { setStatusAttrValue(CIMIWinHandler::STATUS_ID_CN, (!m_bCN) ? 1 : 0); if (!m_pIC->isEmpty()) { changeMasks |= CANDIDATE_MASK | PREEDIT_MASK; clearIC(); } } else if (m_pHotkeyProfile && m_pHotkeyProfile->isPunctSwitchKey(key)) { // On CTRL+. switch Full/Half punc changeMasks |= KEYEVENT_USED; setStatusAttrValue(CIMIWinHandler::STATUS_ID_FULLPUNC, (!m_bFullPunct) ? 1 : 0); } else if (m_pHotkeyProfile && m_pHotkeyProfile->isSymbolSwitchKey(key)) { // On SHIFT+SPACE switch Full/Half symbol changeMasks |= KEYEVENT_USED; setStatusAttrValue(CIMIWinHandler::STATUS_ID_FULLSYMBOL, (!m_bFullSymbol) ? 1 : 0); } else if (modifiers == IM_CTRL_MASK && keycode == IM_VK_LEFT) { // move left if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveLeft(changeMasks); } } else if (modifiers == IM_CTRL_MASK && keycode == IM_VK_RIGHT) { // move right if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveRight(changeMasks); } } else if (((modifiers == 0 && keycode == IM_VK_PAGE_UP) || (m_pHotkeyProfile && m_pHotkeyProfile->isPageUpKey(key))) && !m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; if (m_candiPageFirst > 0) { m_candiPageFirst -= m_candiWindowSize; if (m_candiPageFirst < 0) m_candiPageFirst = 0; changeMasks |= CANDIDATE_MASK; } } else if (((modifiers == 0 && keycode == IM_VK_PAGE_DOWN) || (m_pHotkeyProfile && m_pHotkeyProfile->isPageDownKey(key))) && !m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; if (m_candiPageFirst + m_candiWindowSize < candidateListSize()) { m_candiPageFirst += m_candiWindowSize; changeMasks |= CANDIDATE_MASK; } } else if (m_pHotkeyProfile && m_pHotkeyProfile->isCandiDeleteKey(key, m_candiWindowSize) && !m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; unsigned sel = (keyvalue == '0' ? 9 : keyvalue - '1'); deleteCandidate(sel, changeMasks); goto PROCESSED; } else if ((modifiers & (IM_CTRL_MASK | IM_ALT_MASK | IM_SUPER_MASK | IM_RELEASE_MASK)) == 0) { if (isKeyValueSelectNumber(keyvalue)) { // try to make selection if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; unsigned sel = getSelectionNumber(keyvalue); makeSelection(sel, changeMasks); } else if (m_smartPunct) { m_pIC->omitNextPunct(); } // using the same keys between selections isKeyStroke = true; goto PROCESSED; } if (keyvalue >= '1' && keyvalue <= '5') { changeMasks |= KEYEVENT_USED; _insert(keyvalue, changeMasks); isKeyStroke = true; } else if (keyvalue > 0x60 && keyvalue < 0x7b) { /* islower(keyvalue) */ changeMasks |= KEYEVENT_USED; _insert(keyvalue, changeMasks); isKeyStroke = true; } else if (keyvalue > 0x20 && keyvalue < 0x7f) { /* isprint(keyvalue) && !isspace(keyvalue) */ changeMasks |= KEYEVENT_USED; if (m_pIC->isEmpty()) { _insert(keyvalue, changeMasks); _doCommit(); clearIC(); } else { _insert(keyvalue, changeMasks); } isKeyStroke = true; } else if (keycode == IM_VK_BACK_SPACE || keycode == IM_VK_DELETE) { if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _erase(keycode == IM_VK_BACK_SPACE, changeMasks); } isKeyStroke = true; } else if (keycode == IM_VK_SPACE) { if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; makeSelection(0, changeMasks); } else { wstring wstr = (CFullCharManager::fullPuncOp())(keyvalue); if (wstr.size()) { _commitString(wstr); changeMasks |= KEYEVENT_USED; } } } else if (keycode == IM_VK_ENTER) { if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED | CANDIDATE_MASK | PREEDIT_MASK; _doCommit(false); clearIC(); } } else if (keycode == IM_VK_ESCAPE) { if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED | CANDIDATE_MASK | PREEDIT_MASK; clearIC(); } } else if (keycode == IM_VK_LEFT) { // move left syllable if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveLeftSyllable(changeMasks); } } else if (keycode == IM_VK_RIGHT) { // move right syllable if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveRightSyllable(changeMasks); } } else if (keycode == IM_VK_HOME) { // move home if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveHome(changeMasks); } } else if (keycode == IM_VK_END) { // move end if (!m_pIC->isEmpty()) { changeMasks |= KEYEVENT_USED; _moveEnd(changeMasks); } } } else { goto RETURN; } PROCESSED:; m_pHotkeyProfile->rememberLastKey(key); RETURN:; if (isKeyStroke) { setOpMode(XHVOM_INPUT); } else { setOpMode(XHVOM_SELECT); } #ifdef DEBUG printf(" |-->(Mask=0x%x)\n", changeMasks); #endif updateWindows(changeMasks); return changeMasks & KEYEVENT_USED; }