77
88from consts import SAVE_KEY_MAP , ENUM_SAVE_COLUMN , ENUM_SAVE_ROW , ERRORCODE_LOAD , ENUM_TABLEVIEW_INITMODE , ENUM_TABLEVIEW_HVFUNC
99
10- from data_manager import DataManager
10+ from data_manager import DataManager , DataEditType
1111from gui_tableview import CSVTableWidget
1212from gui_infotable import InfoTable
1313from gui_mapinfotable import MapInfoTable
1414from gui_search import SearchWidget
15- from gui_dialog import OptionDialog , LoadOptionDialog , SaveOptionDialog , ImageViewerDialog , FuncLoadingDialog , CoordDialog
15+ from gui_dialog import OptionDialog , LoadOptionDialog , SaveOptionDialog , ImageViewerDialog , FuncLoadingDialog , CoordDialog , SimpleInputDialog
1616from network import get_mapinfo_from_pnu , get_map_img
17+ from clipboard import clipboard_copy_csvte_info , clipboard_paste_csvte_info
1718from theme import apply_theme
1819
1920TITLE_NAME = "CSV Table Editor"
@@ -197,6 +198,7 @@ def init_content(self):
197198 def init_variable (self ):
198199 self .dm = DataManager (self )
199200 self .showing_columns = []
201+ self .hv_copy_mode = False
200202
201203 def start_load (self , src = "" ):
202204 load_mode = 0
@@ -222,6 +224,7 @@ def load(self, src, load_mode):
222224 error_code = self .dm .load_data (src , load_mode )
223225
224226 if error_code == ERRORCODE_LOAD .SUCCESS :
227+ self .hv_copy_mode = False
225228 self .showing_columns = self .dm .cond_data .columns .to_list ()
226229 self .search_widget .initialize (self .showing_columns )
227230 self .table_widget .set_data (
@@ -378,41 +381,66 @@ def on_value_edit_callback(self, row, col, value):
378381
379382 self .refresh_tables (row )
380383
381- def on_hv_edit_callback (self , is_h , pos , str_menu ):
382- if True : # TODO : NOT YET
383- QMessageBox .information (self , '경고' , "행 및 열 함수는 구현 중입니다." )
384-
385- return
386-
387- if not is_h :
384+ def on_hv_edit_callback (self , is_column , row , str_menu ):
385+ pos = row
386+ if not is_column :
388387 pos = pos + (self .table_widget .get_page () - 1 ) * \
389388 self .table_widget .page_size
390389
391- if str_menu == ENUM_TABLEVIEW_HVFUNC .CREATE :
392- if is_h :
393- # 컬럼값묻는 dialog 나옴(tableview에서 class 재활용(gui_dialog로 옮기기))
394- self .dm .hv_add_column ()
395- else :
396- # dialog 없이 바로 생성
397- self .dm .hv_add_row ()
398- elif str_menu == ENUM_TABLEVIEW_HVFUNC .DUPLICATE :
399- # index 자리에 넣어지고 원래있던건 한칸 뒤로 미룸
400- self .dm .hv_duplicate ()
401- elif str_menu == ENUM_TABLEVIEW_HVFUNC .REMOVE :
402- self .dm .hv_remove ()
403- elif str_menu == ENUM_TABLEVIEW_HVFUNC .COPY :
404- pass
405- # 가로면 가로 행렬 값 그대로 가져와서 CSVTE_row[{s}] 클립보드에 넣기
406- # 세로면 세로 행렬의 name, index 가져와서 CSVTE_column[index, name] 클립보드에 넣기 -> name, index가 틀리면 없다고 에러 내기
407- elif str_menu == ENUM_TABLEVIEW_HVFUNC .PASTE :
408- pass
409- # 가로: CSVTE_row[{s}] 형식 검사 -> 삽입하되, 총갯수가 부족하면 나머지 전부 공란(공란이 뭐였는지 다시 보고 오기 ""인지 NaN인지)
410- # 세로면
411-
412- # 모든 hv_함수는 공통적으로 conv 수정 -> edited_list에 저장함.
413- # export할때 이 수정사항 리스트를 result에 적용해서 내보냄. (edited_list에는 change_value도 포함되는 것!)
414- # 이걸 위해 자료구조 하나 만들기.
415- # 자료구조는 type, args로 이루어져있음.
390+ if str_menu == ENUM_TABLEVIEW_HVFUNC .COPY :
391+ clipboard_copy_csvte_info (self .dm .cond_data , pos , is_column )
392+ self .hv_copy_mode = True
393+ else :
394+ edit_type = None
395+ args = None
396+ if str_menu == ENUM_TABLEVIEW_HVFUNC .CREATE :
397+ if is_column :
398+ dialog = SimpleInputDialog (
399+ self , '이름 설정' , '새 열의 이름을 설정하세요.' )
400+ if dialog .exec_ () == QDialog .Accepted :
401+ title = dialog .getText ()
402+ if title :
403+ edit_type = DataEditType .ADD_COLUMN
404+ args = [pos , title ]
405+ else :
406+ edit_type = DataEditType .ADD_ROW
407+ args = [pos ]
408+ elif str_menu == ENUM_TABLEVIEW_HVFUNC .DUPLICATE :
409+ edit_type = DataEditType .DUPLICATE_COLUMN if is_column else DataEditType .DUPLICATE_ROW
410+ args = [pos ]
411+ elif str_menu == ENUM_TABLEVIEW_HVFUNC .REMOVE :
412+ rows , columns = self .dm .cond_data .shape
413+ if is_column :
414+ if columns <= 1 :
415+ QMessageBox .information (self , '경고' , "열의 갯수가 너무 적습니다." )
416+ return
417+ edit_type = DataEditType .REMOVE_COLUMN
418+ else :
419+ if rows <= 1 :
420+ QMessageBox .information (self , '경고' , "행의 갯수가 너무 적습니다." )
421+ return
422+ edit_type = DataEditType .REMOVE_ROW
423+ args = [pos ]
424+ elif str_menu == ENUM_TABLEVIEW_HVFUNC .PASTE :
425+ target_h , result = clipboard_paste_csvte_info ()
426+ if target_h != is_column :
427+ QMessageBox .information (self , '경고' , "붙여넣을 행이나 열이 잘못되었습니다." )
428+ return
429+ if not self .hv_copy_mode :
430+ QMessageBox .information (self , '경고' , "복사를 먼저 진행해주세요." )
431+ return
432+
433+ edit_type = DataEditType .EDIT_COLUMN if is_column else DataEditType .EDIT_ROW
434+ args = [pos , result ]
435+
436+ if edit_type :
437+ self .dm .change_hv (edit_type , args )
438+ self .table_widget .set_data (
439+ self .dm .cond_data , ENUM_TABLEVIEW_INITMODE .EDIT )
440+ self .refresh_tables (row )
441+
442+ if not str_menu == ENUM_TABLEVIEW_HVFUNC .PASTE :
443+ self .hv_copy_mode = False
416444
417445 # 검색필터를 세팅할때 호출됨 : 필터에 맞춰서 table_widget 내용을 바꿈
418446 def on_condition_changed (self , conditions ):
0 commit comments