OSDN Git Service

[UI][Qt][EMU] Available to build.Some features still be wrong :-(
authorK.Ohta <whatisthis.sowhat@gmail.com>
Wed, 1 Feb 2023 06:55:53 +0000 (15:55 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Wed, 1 Feb 2023 06:55:53 +0000 (15:55 +0900)
14 files changed:
source/src/emu.cpp
source/src/emu.h
source/src/emu_template.h
source/src/osdcall_types.h
source/src/qt/common/emu_thread_slots.cpp
source/src/qt/gui/emu_thread_tmpl.h
source/src/qt/gui/mainwidget_base.h
source/src/qt/gui/menu_disk.cpp
source/src/qt/gui/menu_metaclass.cpp
source/src/qt/gui/menu_metaclass.h
source/src/qt/gui/qt_main.h
source/src/qt/gui/util_fd.cpp
source/src/qt/osd_base.cpp
source/src/qt/osd_base.h

index 5639c31..f5db8fd 100644 (file)
@@ -164,14 +164,14 @@ EMU::~EMU()
 // messaging proxies.
 // These are mostly used for replying mounting virtual media.
 // 20230125 K.O
-void EMU::osdcall_string(int media_type, int drive,int message_type, _TCHAR* message)
+void EMU::osdcall_string(EMU_MEDIA_TYPE::type_t media_type, int drive,EMU_MESSAGE_TYPE::type_t message_type, _TCHAR* message)
 {
        __LIKELY_IF(osd != nullptr) {
                osd->string_message_from_emu(media_type, drive, message_type, message);
        }
 }
 
-void EMU::osdcall_int(EMU_MEDIA_TYPE media_type, int drive, EMU_MESSAGE_TYPE message_type, int64_t data)
+void EMU::osdcall_int(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type, int64_t data)
 {
        __LIKELY_IF(osd != nullptr) {
                osd->int_message_from_emu(media_type, drive, message_type, data);
index 4a53dc6..34887f4 100644 (file)
@@ -405,6 +405,8 @@ public:
        void load_state(const _TCHAR* file_path)  override;
        const _TCHAR *state_file_path(int num) override;
 #endif
+       void __FASTCALL osdcall_string(EMU_MEDIA_TYPE::type_t media_type, int drive,  EMU_MESSAGE_TYPE::type_t message_type, _TCHAR* message) override;
+       void __FASTCALL osdcall_int(EMU_MEDIA_TYPE::type_t media_type, int drive,  EMU_MESSAGE_TYPE::type_t message_type, int64_t data) override;
 };
 
 #endif // _EMU_H_
index e22f3cd..8d999d1 100644 (file)
@@ -473,7 +473,7 @@ public:
        virtual bool is_quick_disk_connected(int drv) { return false; }
        virtual bool is_quick_disk_inserted(int drv) { return false; }
        virtual uint32_t is_quick_disk_accessed() { return 0x00000000; }
-       virtual bool get_quick_disk_status(int drive = 0, _TCHAR* media_name, size_t buflen, bool& play, int& wait_count, int& cur_bank)
+       virtual bool get_quick_disk_status(int drive, _TCHAR* media_name, size_t buflen, bool& play, int& wait_count, int& cur_bank)
        {
                return false;
        }
@@ -486,7 +486,7 @@ public:
        virtual void close_hard_disk(int drv) {}
        virtual bool is_hard_disk_inserted(int drv) { return false; }
        virtual uint32_t is_hard_disk_accessed() { return 0x00000000; }
-       virtual bool get_hard_disk_status(int drive = 0, _TCHAR* media_name, size_t buflen, bool& play, int& wait_count, int& cur_bank)
+       virtual bool get_hard_disk_status(int drive, _TCHAR* media_name, size_t buflen, bool& play, int& wait_count, int& cur_bank)
        {
                return false;
        }
@@ -553,8 +553,8 @@ public:
        // messaging proxies.
        // These are mostly used for replying mounting virtual media.
        // 20230125 K.O
-       virtual void __FASTCALL osdcall_string(EMU_MEDIA_TYPE media_type, int drive,  EMU_MESSAGE_TYPE message_type, _TCHAR* message) {}
-       virtual void __FASTCALL osdcall_int(EMU_MEDIA_TYPE media_type, int drive,  EMU_MESSAGE_TYPE message_type, int64_t data) { }
+       virtual void __FASTCALL osdcall_string(EMU_MEDIA_TYPE::type_t media_type, int drive,  EMU_MESSAGE_TYPE::type_t message_type, _TCHAR* message) {}
+       virtual void __FASTCALL osdcall_int(EMU_MEDIA_TYPE::type_t media_type, int drive,  EMU_MESSAGE_TYPE::type_t message_type, int64_t data) { }
 
 };
 
index b4a8355..b5c9511 100644 (file)
@@ -12,6 +12,7 @@
 #pragma once
 
 namespace EMU_MEDIA_TYPE {
+       typedef uint64_t type_t ;
        enum  {
                NONE,
                BINARY,
@@ -33,6 +34,7 @@ namespace EMU_MEDIA_TYPE {
 
 
 namespace EMU_MESSAGE_TYPE {
+       typedef uint64_t type_t ;
        enum {
                NONE,
                MEDIA_MOUNTED,
@@ -42,4 +44,3 @@ namespace EMU_MESSAGE_TYPE {
                MESSAGE_END
        };
 }
-
index 9ec0f12..2f6987a 100644 (file)
@@ -529,7 +529,7 @@ void EmuThreadClassBase::do_open_disk(int drv, QString path, int bank)
        const _TCHAR *file_path = (const _TCHAR *)(path.toLocal8Bit().constData());
        if(!(FILEIO::IsFileExisting(file_path))) return; // File not found.
 
-       bool reserved = p_emu->is_floppy_disk_inserted(drv));
+       bool reserved = p_emu->is_floppy_disk_inserted(drv);
        p_emu->open_floppy_disk(drv, file_path, bank);
        
        fd_open_wait_count[drv] = (int)(get_emu_frame_rate() * 0.05);
@@ -892,12 +892,12 @@ void EmuThreadClassBase::done_open_cart(int drive, QString path)
                relpath = QString::fromLocal8Bit(&(__dir[1]));
        }
        emit sig_ui_update_cart_list(drive, list);
-       emit sig_change_virtual_media(CSP_DockDisks_Domain_CART, drive, relpath);
+       emit sig_change_virtual_media(CSP_DockDisks_Domain_Cart, drive, relpath);
 }
 void EmuThreadClassBase::done_close_cart(int drive)
 {
        emit sig_ui_close_cart(drive);
-       emit sig_change_virtual_media(CSP_DockDisks_Domain_CART, drive, QString::fromUtf8(""));
+       emit sig_change_virtual_media(CSP_DockDisks_Domain_Cart, drive, QString::fromUtf8(""));
 }
 
 void EmuThreadClassBase::do_close_laser_disc(int drv)
@@ -943,7 +943,7 @@ void EmuThreadClassBase::done_open_laser_disc(int drive, QString path)
 void EmuThreadClassBase::done_close_laser_disc(int drive)
 {
        emit sig_ui_close_laser_disc(drive);
-       emit sig_change_virtual_media(CSP_DockDisks_Domain_LD, drv, QString::fromUtf8(""));
+       emit sig_change_virtual_media(CSP_DockDisks_Domain_LD, drive, QString::fromUtf8(""));
 }
 
 void EmuThreadClassBase::do_load_binary(int drv, QString path)
@@ -989,7 +989,7 @@ void EmuThreadClassBase::done_open_binary(int drive, QString path)
 void EmuThreadClassBase::done_close_binary(int drive)
 {
        emit sig_ui_close_binary(drive);
-       emit sig_change_virtual_media(CSP_DockDisks_Domain_Binary, drv, QString::fromUtf8(""));
+       emit sig_change_virtual_media(CSP_DockDisks_Domain_Binary, drive, QString::fromUtf8(""));
 }
 
 void EmuThreadClassBase::do_write_protect_bubble_casette(int drv, bool flag)
@@ -1103,7 +1103,7 @@ void EmuThreadClassBase::done_open_bubble(int drive, QString path)
        emit sig_change_virtual_media(CSP_DockDisks_Domain_Bubble, drive, relpath);
 }
 
-void EmuThreadClassBase::done_close_bubble_casette(int drive)
+void EmuThreadClassBase::done_close_bubble(int drive)
 {
        emit sig_ui_close_bubble_casette(drive);
        emit sig_change_virtual_media(CSP_DockDisks_Domain_Bubble, drive, QString::fromUtf8(""));
index 23fbda2..1bbba60 100644 (file)
@@ -463,7 +463,7 @@ signals:
        int sig_ui_close_hard_disk(int);
        
        int sig_ui_update_cart_list(int, QStringList);
-       int sig_ui_close_cart_disk(int);
+       int sig_ui_close_cart(int);
        
        int sig_ui_update_laser_disc_list(int, QStringList);
        int sig_ui_close_laser_disc(int);
index 90360da..091116f 100644 (file)
@@ -906,6 +906,9 @@ public slots:
        void do_set_visible_virtual_media_left();
        void do_set_visible_virtual_media_right();
 
+       void do_update_floppy_history(int drive, QStringList lst);
+       void do_insert_floppy_history(int drive, QString path);
+
        void do_set_emulate_cursor_as(void);
        void do_set_logging_fdc(bool onoff);    
        void do_set_separate_thread_draw(bool f);
index 85729fb..70af3ab 100644 (file)
@@ -53,7 +53,7 @@ void Menu_FDClass::do_open_dialog()
        do_open_dialog_common(dlg);
 
        disconnect(dlg->param, SIGNAL(sig_open_disk(int, QString)), this, SLOT(do_open_media(int, QString)));
-       connect(dlg->param, SIGNAL(sig_open_disk(int, QString)), p_wid, SLOT(_open_media(int, QString)));
+       connect(dlg->param, SIGNAL(sig_open_disk(int, QString)), p_wid, SLOT(_open_disk(int, QString)));
        emit sig_show();
 }
 void Menu_FDClass::do_open_dialog_create_fd()
index 0cf8e4b..985f25f 100644 (file)
@@ -266,39 +266,44 @@ void Menu_MetaClass::do_open_dialog_common(CSP_DiskDialog* dlg)
        return;
 }
 
+void Menu_MetaClass::do_insert_history(QString path)
+{
+       QStringList lst;
+       for(int i = 0; i < MAX_HISTORY ; i++) {
+               if(action_recent_list[i] != nullptr) {
+                       QString tmpstr = action_recent_list[i]->text();
+                       lst.append(tmpstr);
+               }
+       }
+       if(lst.at(0) == path) {
+               // None changed.
+               return;
+       }
+       QStringList lst2;
+       lst2.clear();
+       for(size_t i = 0 ; i < lst.size(); i++) {
+               if(path != lst.at(i)) lst2.append(lst.at(i));
+       }
+       lst2.push_front(path);
+       do_update_histories(lst2);
+}
 void Menu_MetaClass::do_update_histories(QStringList lst)
 {
-       int ii;
        QString tmps;
+       int ptr = 0;
        for(int i = 0; i < lst.size(); i++) {
                if(i >= MAX_HISTORY) break;
                action_recent_list[i]->setText(lst.at(i));
                action_recent_list[i]->setVisible(true);
+               ptr++;
        }
-       for(int i = lst.size(); i < MAX_HISTORY; i++) {
+       for(int i = ptr; i < MAX_HISTORY; i++) {
                action_recent_list[i]->setText(QString::fromUtf8(""));
                action_recent_list[i]->setVisible(false);
        }       
 }
 
-void Menu_MetaClass::do_add_media(QStringList path)
-{
-       if(path.isEmpty()) return;
-       if(path.isNull()) return;
-       
-       QStringList list;
-       list.clear();
-       list.append(path);
-       for(int i = 0; i < MAX_HISTORY; i++) {
-               if(action_recent_list[i] != nullptr) {
-                       QString tmps = action_recent_list[i]->text();
-                       if(tmps != path) {
-                               list.append(tmps);
-                       }
-               }
-       }
-       do_update_histories(list);
-}
+
 void Menu_MetaClass::do_clear_inner_media(void)
 {
        int ii;
index f01874c..d0d9a03 100644 (file)
@@ -117,11 +117,13 @@ public slots:
        void do_open_media(int drv, QString name);
        void do_insert_media(void);
        void do_eject_media(void);
+
        void do_open_inner_media(void);
        void do_open_recent_media(void);
        void do_write_protect_media(void);
        void do_write_unprotect_media(void);
        void do_add_media_extension(QString ext, QString description);
+       
        void do_set_initialize_directory(const char *dir);
        virtual void do_open_dialog(void);
        void do_clear_inner_media(void);
@@ -129,6 +131,8 @@ public slots:
        void do_update_inner_media(QStringList lst, int num);
        void do_update_inner_media_bubble(QStringList lst, int num);
        void do_update_histories(QStringList lst);
+       void do_insert_history(QString path);
+
        void do_set_window_title(QString s);
        void do_close_window();
        void do_finish(int i);
index 8e49904..d45aff1 100644 (file)
@@ -40,28 +40,30 @@ extern const int DLL_PREFIX screen_mode_height[];
 
 #ifndef UPDATE_HISTORY
 #define UPDATE_HISTORY(path, recent, list) { \
-       int no = MAX_HISTORY - 1; \
-       bool found = false; \
-       for(int i = 0; i < MAX_HISTORY; i++) { \
-               if(strcmp(recent[i], path) == 0) { \
-                       no = i; \
-                       found = true; \
-                       break; \
-               } \
-       } \
-       if(found) { \
-               strcpy(recent[MAX_HISTORY - 1], ""); \
-       } \
-       for(int i = no; i > 0; i--) { \
-               strcpy(recent[i], recent[i - 1]); \
-       } \
-       strcpy(recent[0], path); \
-       list.clear(); \
-       for(int i = 0; i < MAX_HISTORY; i++) { \
-               QString _tmps = QString::fromLocal8Bit(recent[i]); \
-               list << _tmps; \
-       } \
-}
+               if(strlen(path) > 0) {                                                          \
+                       if(strcmp(recent[0], path) != 0) {                              \
+                               for(int i = (MAX_HISTORY - 1); i > 0; i--) {    \
+                                       strcpy(recent[i], recent[i - 1]);                       \
+                               }                                                                                               \
+                               strcpy(recent[0], path);                                                \
+                               list.clear();                                                                   \
+                               for(int i = 0; i < MAX_HISTORY; i++) {                                  \
+                                       QString _tmps = QString::fromLocal8Bit(recent[i]);      \
+                                       bool found = false;                                                                     \
+                                       for(int j = i - 1; j >= 0; j--) {                                               \
+                                               QString _tmps2 = QString::fromLocal8Bit(recent[j]); \
+                                               if(_tmps2 == _tmps) {                                                   \
+                                                       found = true;                                                           \
+                                                       break;                                                                          \
+                                               }                                                                                               \
+                                       }                                                                                                       \
+                                       if(!found) {                                                                            \
+                                               list << _tmps;                                                                  \
+                                       }                                                                                                       \
+                               }                                                                                                               \
+                       }                                                                                                                       \
+               }                                                                                                                               \
+       }
 #endif
 
 #ifndef SETUP_HISTORY
index 8291e8b..4eaca34 100644 (file)
@@ -90,20 +90,20 @@ void Ui_MainWindowBase::ConfigFloppyMenu(void)
        }
 }
 
-void Uo_MainWindowBase::do_update_floppy_history(int drive, QStringList lst)
+void Ui_MainWindowBase::do_update_floppy_history(int drive, QStringList lst)
 {
        if((drive < 0) || (drive >= using_flags->get_max_drive())) {
-               if(menu_fds[drv] != nullptr) {
-                       menu_fds[drv]->do_update_histories(lst);
+               if(menu_fds[drive] != nullptr) {
+                       menu_fds[drive]->do_update_histories(lst);
                }
        }
 }
 
-void Uo_MainWindowBase::do_insert_floppy_history(int drive, QString path)
+void Ui_MainWindowBase::do_insert_floppy_history(int drive, QString path)
 {
        if((drive < 0) || (drive >= using_flags->get_max_drive())) {
-               if(menu_fds[drv] != nullptr) {
-                       menu_fds[drv]->do_update_histories(lst);
+               if(menu_fds[drive] != nullptr) {
+                       menu_fds[drive]->do_insert_history(path);
                }
        }
 }
index e76a52a..9812fb1 100644 (file)
@@ -671,12 +671,16 @@ Sint16* OSD_BASE::create_sound(int *extra_frames)
        return (Sint16 *)vm->create_sound(extra_frames);
 }
 
-void OSD_BASE::string_message_to_binary(int media_type, int drive, int message_type, _TCHAR* message)
+void OSD_BASE::string_message_from_emu(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type, _TCHAR* message)
 {
+//     switch(media_type) {
+//     case EMU_MEDIA_TYPE::BINARY:
+//     }
 }
-void OSD_BASE::string_message_from_emu(int media_type, int drive, int message_type, _TCHAR* message)
+
+void OSD_BASE::int_message_from_emu(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type, int64_t data)
 {
-       switch(media_type) {
-       case EMU_MEDIA_TYPE::BINARY:
-       }
+//     switch(media_type) {
+//     case EMU_MEDIA_TYPE::BINARY:
+//     }
 }
index c5a3c83..a5040a6 100644 (file)
@@ -30,6 +30,8 @@
 #define SOCKET_BUFFER_MAX 0x100000
 #include "../config.h"
 #include "osd_types.h"
+// For UIs
+#include "osdcall_types.h"
 
 #define N_MAX_BUTTONS 128
 
@@ -681,6 +683,10 @@ public:
        void finish_waiting_in_debugger();
        void process_waiting_in_debugger();
 
+       // Messaging wrapper from EMU:: to OSD::
+       void __FASTCALL string_message_from_emu(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t  message_type, _TCHAR* message);
+       void __FASTCALL int_message_from_emu(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type, int64_t data);
+                                                                          
 public slots:
        void enable_mouse();
        void disable_mouse();
@@ -714,9 +720,6 @@ public slots:
        void do_set_host_sound_output_device(QString device_name);
        void do_update_master_volume(int level);
 
-       // Messaging wrapper from EMU:: to OSD::
-       void __FASTCALL string_message_from_emu(EMU_MEDIA_TYPE media_type, int drive, EMU_MESSAGE_TYPE  message_type, _TCHAR* message);
-       void __FASTCALL int_message_from_emu(EMU_MEDIA_TYPE media_type, int drive, EMU_MESSAGE_TYPE message_type, int64_t data);
 signals:
        int sig_update_screen(void *, bool);
        int sig_save_screen(const char *);
@@ -773,7 +776,7 @@ signals:
        int sig_notify_error_virtual_media(int type, int drive, int64_t status);
        int sig_notify_select_d88(int drive, int cur_bank);
        int sig_notify_update_d88_list(int drive, int bank_num, QStringList names);
-       int sig_notify_clear_b77_list(int drive, int cur_bank);
+       int sig_notify_clear_d88_list(int drive, int cur_bank);
        
        int sig_notify_select_b77(int drive, int cur_bank);
        int sig_notify_update_b77_list(int drive, int bank_num, QStringList names);